1、@property int age;
在编译器情况下会自动编译展开为:
<age在setter中首字母大写,点语法为p.age>
- (void)setAge:(int)age;
- (int)age;
 
2、同理:@property int _age;
在编译器情况下会自动编译展开为:
<_age在setter中首字母大写,为横线,大写仍保持,此时点语法为p._age>
- (void)set_age:(int)age;
- (int)_age;
一般情况,使用1,而不使用2.

@synthesize age = _age;
会访问_age这个成员变量,如果_age成员变量不存在,系统就会自动生成@private类型的_age的成员变量,并自动生成age的setter与getter

在4.5版本之后,可以省略@synthesize,此时,
@property int age;有三个作用
1、生成setter与getter的声明
2、生成_age的成员变量
3、生成setter与getter的实现

//注意:必须在非ARC下,在“项目——》building setting——》all——》objcet-C Automic Reference Counting
//@property(nonatomic,retain) NSString *name相当于:
- (void)setName:(NSString *)name
{
    if (_name != name)
    {
        [_name release];
        _name = [name retain
];
    }
}
否则,无法操作 [_name release];
        _name = [name retain
];


// @property:可以自动生成某个成员变量的setter和getter声明
@property int age;
//- (void)setAge:(int)age;
//- (int)age;

@property int height;
//- (void)setHeight:(int)height;
//- (int)height;


可以简写为:@property int age, height;
 
注意:生成的是age、height而不是_age、_height成员变量
 
 
语义设置(assign、retain、copy) 
基本数据类型用assign;NSString用copy、(retain也可以使用);非NSString对象用过retain
 
例:
@property(nonatomic,assign)int age;
@property(nonatomic,copy)NSString *name;
@property(nonatomic,retain)NSString *number;
@property(nonatomic,retain)NSArray *group;

@synthesize age = _age;
// @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量,4.4后自动生成。
 
#import <Foundation/Foundation.h>
@interface Car : NSObject
{
    //int _speed;
    //int _wheels;
}
@property int speed;
@property int wheels;

//@property int speed, wheels;
- (void)test;
@end

 
#import "Car.h"

@implementation Car
//@synthesize speed = _speed, wheels = _wheels;
// 注意:会访问_speed这个成员变量,如果不存在,就会自动生成@private类型的_speed变量
@synthesize speed = _speed;
@synthesize wheels = _wheels;

- (void)test
{
    NSLog(@"速度=%d", _speed);
}

@end

 
同理:
@synthesize age;
// 默认会访问age这个成员变量,如果没有age,就会自动生成@private类型的age变量

@property int age;
如果.m中有setter或getter,系统会生成成员变量以及getter或setter。若既存在setter又存在getter,则不再会产生getter、setter以及成员变量,因为成员变量是为setter与getter服务的。此时(三无),@synthesize age = _age;无法省略。

id等价于NSObject*,万能指针,能指向或操作任何OC对象

property、synthesize、id的更多相关文章

  1. IOS 关键字self,super,copy, retain, assign , readonly , readwrite, nonatomic、 @synthesize、@property、@dynamic

    IOS 关键字self,super,copy, retain, assign , readonly , readwrite, nonatomic.                     @synth ...

  2. iOS 内存管理-copy、 retain、 assign 、readonly 、 readwrite、nonatomic、@property、@synthesize、@dynamic、IB_DESIGNABLE 、 IBInspectable、IBOutletCollection

    浅谈iOS内存管理机制 alloc,retain,copy,release,autorelease 1)使用@property配合@synthesize可以让编译器自动实现getter/setter方 ...

  3. Objective-C 点语法 成员变量的作用域 @property和@synthesize关键字 id类型

    点语法 1.利用点语法替换set方法和get方法 方法调用 Student *stu = [Student new]; [stu setAge : 18]; int age = [stu age]; ...

  4. OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法

    一. 分类-Category 1. 基本用途:Category  分类是OC特有的语言,依赖于类. ➢ 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 ● 继承 ● 分类(Categor ...

  5. @property、@synthesize和dynamic的用法

    原文:  http://blog.csdn.net/hherima/article/details/8622948 @代表“Objective-C”的标志,证明您正在使用Objective-C语言 O ...

  6. ios中点语法、property跟synthesize用法

    一:OC中得点语法 1> 点语法的基本使用: ·使用 对象.成员变量   可以实现设置成员变量值,和获取成员变量的值   2> 点语法的本质 (点语法是Xcode编译器自己帮我们完成的一个 ...

  7. OC语言@property @synthesize和id

    OC语言@property @synthesize和id 一.@property @synthesize关键字 注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明 ...

  8. 李洪强iOS开发之OC语言@property @synthesize和id

    OC语言@property @synthesize和id 一.@property @synthesize关键字 注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明 ...

  9. 「OC」@property @synthesize和id

    一.@property @synthesize关键字 这两个关键字是编译器特性,让Xcode可以自动生成getter和setter. (一)@property 关键字 @property 关键字可以自 ...

随机推荐

  1. C语言常用的库文件(头文件、函数库)

    C语言常用的库文件(头文件.函数库) C系统提供了丰富的系统文件,称为库文件.C的库文件分为两类,一类是扩展名为".h"的文件,称为头文件,在前面的包含命令中我们已多次使用过.在& ...

  2. 禁止select下拉框的其中某个选择项不能被选择

    <select name='Grade' class='s8'> <option value=''>— 请选择 —</option>? <optgroup l ...

  3. JavaScript计算加减乘除

    //加法函数 function jiafa(a,b){ var a=parseInt(document.getElementById("number1").value); //pa ...

  4. linux ARP攻击处理

    今天部门受到arp攻击 多说机器无法正常联网了,windows下的绑定下mac地址或者打开360arp防火墙就就ok了.我讲讲linux下的arp攻击的发现和处理吧.边学边讲,说的不对的欢迎大家指出, ...

  5. Mono For Android中简单实现按钮的动画效果

    Android中动画的分Tween Animation和Frame Animation,本节主要讲Tween Animation的实现. 一般是通过XML文件来定义动画的,具体如下: 1.在项目res ...

  6. GitHub上搭建Hexo化的博客

    遇过的坑: 使用GitBash安装Hexo(npm的环境变量配置)注意 安装完成后添加Path环境变量,使npm命令生效.新版已经会自动配置Path 1 ;C:\Program Files\nodej ...

  7. How to change a product dropdown attribute to a multiselect in Magento

    First, update the attribute input type to multiselect: UPDATE eav_attribute SET entity_type_id ', at ...

  8. 【翻译自mos文章】改变数据库用户sysman(该用户是DB Control Repository 的schema)password的方法

    改变数据库用户sysman(该用户是DB Control Repository 的schema)password的方法 參考原文: How To Change the Password of the ...

  9. 简单的Ajax

    ajax获取时间的html代码 <head> <meta http-equiv="Content-Type" content="text/html; c ...

  10. CodeSmith exclude global 文件和文件夹问题 与 输入中文显示乱码问题

    1.打开C:/Documents and Settings/你的用户名/Application Data/CodeSmith/v4.1/CodeSmithGui.config文件. 2.在<te ...