您的位置:首页 > 运维架构

@property属性

2016-01-26 16:27 176 查看
@property会自动创建setter和getter方法 1.strong和weak 声明一个变量时,属性设置为strong或weak,表示这个对象存在堆中,栈中有指针指向这个对象。 strong:强表示保持对这个存储,在堆中保持这个所指的东西,只要有任何一个强指针指向它,引用计数加1,oc会追踪每一个指向堆中对象的强指针,只要有一个强指针存在,就会将其留在堆中,只有不存在任何强指针时,它会从堆中立刻被释放掉。 weak:弱会告诉oc我有一个指针指向堆中的这个,只要还有强指针指向它,就将它留在内存中,只要不再有强指针指向它,内存就会释放,此时这个弱指针会被设置为nil,nil表示这个指针不再指向任何东西。其他语言如果指针为空时会出现程序崩溃,但oc不会,发送消息给nil指针,不会执行任何代码,如果这个消息有返回值,会返回0给它。 *只要这个对象不再有任何指针指向它,就会从堆中释放掉。强和弱的区别就是,如果是弱指针,即使当前有指针指向它,也可以释放掉。比如页面的网络请求,发送网络请求后又返回上一页面,此时会被立刻释放内存。 2.assign:一般用于基本数据类型的属性声明,没有引用计数问题。基本数据类型不存储在堆中,比如bool,int,float等。 3.retain和copy retain是指针拷贝,一个新的指针指向还是原来的对象;copy是对象拷贝,指针指向与原对象相同内容的内存区域,不改变原对象内容。 4.nonatomic和atomic nonatomic:非原子性的,非线程安全。对于iOS ui在ui线程执行,数据在model线程执行,两个线程进行线程间通信,不需要线程安全,这样简单有效。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: