XCODE 4.2 中的@synthesize, @property


说明:"@property"、"@synthesize"和"release"之间的关系。

在***ViewController.h中在建立"标签"控件后,使用了@property(nonatomic,retain) UILabel*label;声明控件的属性,并且加入在前面@interface中指定的相同UILabel控件对象,所以在**ViewController.m开始时必须添加@synthesize label;

告诉编译器去合成控件的存储器的方法,为程序自动生成Label标签控件的设置函数(setters)和获得函数(getter)。最后在模板程序的默认(void)dealloc的释放方法中使用[labelrelease];把label在程序中释放。这样就完整地完成了程序中一个控件的生命周期了。


在ViewController.h头文件代码内的@property (nonatomic, retain)UILabel中,nonatomic使用单线程机制减少系统资源使用,将更改方法和修改方法生成在Property(属性),retain(保留)属性的可选项表明向属性的对象发送一个保留消息。

nonatomic它要与@synthesize一起使用才有意义。atomic的意思就是setter/getter这个函数是一个原语操作。如果有多个线程同时调用setter的话,不会出现某一个线程执行setter全部语句之前,另一个线程开始执行setter情况,相当于函数头尾加了锁一样。nonatomic不保证setter/getter的原语行,所以你可能会取到不完整的东西。比如setter函数里面改变两个成员变量,如果你用nonatomic的话,getter可能会取到只更改了其中一个变量时候的状态

=============================================================

可以比较简单解释如下:

@property - declares a property

@property-声明属性

@synthesize - creates getter and setter methods for a property

@synthesize - 为一个属性创建getter和setter方法

nonatomic,retain

这个两个参数为属性的可选附加参数。

(atomic、nonatomic)属性用于多线程编程。在多线程环境下设置为atomic可以保证数据读取的一致性(因为,它将保证数据仅仅被一个线程独占。也就是说一个线程进行写操作时,将锁定该属性,不允许其他的线程进行写操作。)由于该操作会对数据进行锁操作,故会消耗较多的资源。所以在不需要进行多线程操作时建议将该属性设置为nonatomic,设置为该参数时程序在任何情况都不会锁定该属性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值