理解“属性”

属性是objective-C的属性。保存数据的实列变量,一般通过getter 和setter进行取值和赋值在在c++中我们通常这样定义一个类

@interface Student : NSObject {
    @public
    NSString *_name;
    @private
    NSInteger _age;
}

@end

这样的写法name age 在对象编译的时候布局就已经规定了。简单的说就是编译的时候编译器会把变量编程存放对象内存的编译量,比方说一个Student的对象A。name 处于对象的開始位置,编译的时候凡是A->_name的地方替换成A+0,而age被换成A+4,偏移量依据变量在内存的位置决定的。那假设我如今新增了一个属性,在_name 之前全部的偏移量都会变化。须要又一次编译。

objective-c会把上述偏移量交与类对象管理,它会在执行期查找。因此在执行期向类中加入实例变量。

objective-c 提供了@property 属性。为了程序猿更好的使用,它能够自己主动帮我门生成setter与getter方法,这时候点语法就派上了用场。这些我门我能够理解为编译器特性

如今的版本号@property 会自己主动补全属性没有的方法。

@synthesize 能够制定生成变量的名字。假设没有会自己主动生成下划线的变量,
@property 另一下特性
原子性
读写权限控制
readonly/readwrite
内存管理语句
assign 赋值操作
strong 拥有。保存新的值释放旧的值
weak非拥有,既不释放旧的值。也不保留新的值,当他指的对象销毁是属性会被清空
copy与strong 相似,保留新的值时。并不保留,而是对新的值进行copy。

getter=<>
setter=<>指定方法名字

直接訪问变量的时候,要遵从变量声明的声明语义。意思是比方声明了一个copy属性的变量,直接訪问变量本身的时候也要进行copy操作。

posted @ 2017-08-19 14:03  wzjhoutai  阅读(181)  评论(0编辑  收藏  举报