分享

XCODE 4.2 中的@synthesize, @property

 點點滴滴 2012-07-18

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,设置为该参数时程序在任何情况都不会锁定该属性。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多