@property (nonatomic,retain,...)

@property (nonatomic,retain) IBOutlet UIWindow *window ;或者@property (nonatomic, retain) IBOutlet UIButton *myButton;

@property (nonatomic,retain)中的nonatom和retain是什么意思:

@property是一个属性访问声明,扩号内支持以下几个属性:
1,getter=getterName,setter=setterName,设置setter与getter的方法名
2,readwrite,readonly,设置可供访问级别
2,assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题
3,retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)
4,copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再Copy出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。
5,nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级。

 就编译器而言,IBOutlet并未执行任何操作。它的唯一作用是告诉Interface Builder,此实例变量将被连接到nib中的对象。你创建的任何需要连接到nib文件中的对象的实例变量都必须以IBOutlet关键字开头。打开Interface Builder时,它会在项目头文件中扫描此关键字,你可以根据这些(且只能根据这些)变量将代码连接到nib。


Properties (readonly,retain,nonatomic)  

在头文件中用@property来声明属性:
@property float width;
@property float height;
@property Point center;
然后再实现中用@synthesize来让编译器产生getter和setter:
@synthesize width, height, center;
float leftEdge = self.center.x - self.width/2;             
//将成员变量进行属性声明后,就可以通过“点操作”对成员变量进行读写操作了。
事实上,属性的更深刻的意义是在于:可读性;内存管理;线程处理。
可读性,一个属性默认是可读写的,如果加了readonly,则变为只读的。
内存管理,默认为assign,如果设置了retain,则通知编译器想分配给该属性的对象发送一个保留(retain)消息,这将确保属性底层的实例变量在使用过程中不会从内存中清除。
线程处理,默认生成的getter和setter是线程安全的。但由于大多数iphone application并不使用多线程,设置为nonatomic来得到一个不是线程安全但有比较高性能的实现。
(设置成nonatomic后,生成的getter和setter代码中没有互斥操作)


总结下:
@property(nonatomic,retain) NSString *test;
@synthesize test
1,这个操作在新版的xcode等于同时声名了成员变量test,并生成其getter\setter方法。
2,@property的retain等参数只是告诉编译器怎么生成(当初我理解成test和self.test是两个不同的指针)。
3,self.test=abc等于使用了@synthesize生成的setter,其过程有进行内存管理,不会造成内存泄漏,而test=abc则直接更改指针指向,所以尽量使用self.来赋值。
4,self.test=nil;等于执行了
 [test release];
[test=nil];

看一下@synthesize生成的setter是怎样工作的:

-(void)setString:(NSString *)test {

    if (string != newString) {

        [string release];

        string = [newString retain];

    }

}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值