C++ 成员变量存储: 在编译时确定了成员变量内存地址相对于对象的内存地址的偏移量 利用这个偏移量找到成员变量的值
OC 实例变量的存储:实例变量是一个特殊的变量 他存储了偏移量 交由类对象保管 在运行时动态查找偏移量 故可以动态的添加实例变量
@property xx A; 等价于 定义了一个名字为_a的实例变量(默认) + setA的存方法 + A 的取方法
@syethesize A = aa 将实例变量的名字修改为aa不想用默认的实例变量名就可以这么做
如果不想用自动生成的存取方法 则自己写 编译器就不为你生成了
OC中的点语法只可对属性使用 相当调用了属性的 存/取方法 或者在实现中 用 @dynamic 禁止自动生成存取方法
自定义存取方法名:
@property (assign,getter / setter= xxx)Bool b;
属性特质:
读写性:readwirte readonly(不会生成存方法)
原子性:控制对属性进行存取的时候是否加同步锁
内存管理:
assign: c 语言类型
strong:OC 类型 引用计数+1 存方法大概流程是 【newvalue retain】【 oldvalue realese】 oldvalue = newvalue
weak:不会改变指向对象的引用计数 当对象销毁时自动赋值为nil (对nil传递消息 返回nil 不会导致程序崩溃的 很安全 )
unsafe_unretained: 和weak类似 凡是不会自动置nil
copy:拷贝副本 (相当于c++中的深拷贝)
注意:不要在init方法中利用 点 语法存取属性 后边会说到为什么