美文网首页
@property (参数) 类型 名字

@property (参数) 类型 名字

作者: Helen_kay | 来源:发表于2016-09-20 10:59 被阅读0次
@property(nonatomic,strong)NSArray *app;

@property (参数) 类型 名字;

这里的参数主要分为三类:
读写属性(readwrite/readonly)
setter语意(assign/retain/copy)
原子性atomicity(nonatomic)

assign/retain/copy 决定了以何种方式对数据成员赋予新值
atomicity的默认值是atomic,读取函数为原子操作。

• copy: 用于希望保持一份传入值的拷贝,而不是值自身的情况,即把原来的对象完整的赋值到另外一地方,重新加载一内存区,一个地方变了不影响另一个地方的对象。
• assign: 简单的直接赋值,相当于说两个对象指向同个内存区,一个地方的变了,其他的也跟着改变。

• retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数 为1
那上面的是什么意思呢?
Copy 其实是建立了一个相同的对象,而 retain 不是:
比如一个 NSString 对象,地址为 0×1111,内容为@”ABC”
Copy 到另外一个 NSString 之 后,地址为 0×2222,内容相同,新的对象 retain 为 1, 旧 有对象没有变化
retain 到另外一个 NSString 之 后,地址相同(建立一个指针,指针拷贝),内容当然相 同,这个对象的 retain 值+1
assign 地址还是0x1111,内容也还是“ABC”。
也就是说,retain 是指针拷贝,copy 是内容拷贝。
strong,weak 用来修饰属性。
strong 用来修饰强引用的属性;
@property (strong) SomeClass * aObject;
对应原来的
@property (retain) SomeClass * aObject; 和 @property (copy) SomeClass * aObject;

weak 用来修饰弱引用的属性;
@property (weak) SomeClass * aObject;
对应原来的
@property (assign) SomeClass * aObject;

readonly关键字代表setter不会被生成, 所以它不可以和 copy/retain/assign组合使用。

在实现里,只需要
@synthesize mainView;
@synthesize windows;
就可代替 繁琐的setter, getter方法, 这样就 可让编译器自动生成读写函数

定义了property, 使用者,可以 点号(.) 来存取属性了,哈哈,有点像C++了

相关文章

网友评论

      本文标题:@property (参数) 类型 名字

      本文链接:https://www.haomeiwen.com/subject/lhczjttx.html