iOS中定义成员变量时@property(nonatomic, copy/strong/assign/weak)小结
来源:互联网 发布:淘宝信用贷款在哪里查 编辑:程序博客网 时间:2024/06/05 01:06
首先,用@property()定义一个成员变量时:1:生成一个带有下滑线的成员变量,2:生成成员变量的set和get方法
1:定义字符串为成员变量时:@property (nonatomic,copy) NSString *str; //可变不可变都适用
2:定义数组为成员变量时:@property (nonatomic,strong)NSArray *array; //可变不可变都适用
3:当使用协议和代理时,需要在协议的主动方定义一个id类型的delegate时,@property (nonatomic,assign) id<协议名字> delegate;
4:这个需要注意:两个类互相引用时,nonatomic后面一定要用assign 或者 weak,不然会造成内存泄露,释放不完全
关于第4点举个例子:有个Car类,一个Person类
人有一辆车,车里做这这个人
创建车对象的时候,会有一个强指针指向车这个对象
创建人对象的时候,会有一个强指针指向人这个对象
指定这个车就是人拥有的车时,会再有一个指针指向车对象,这时车对象就有两个指针指向
当车里坐的就是这个人时,也会有一个指针指向人这个对象,这时人对象也会有两个指针指向
如果nonatomic 后面是strong的话,那么人对象和车对象都是由两个强指针指向,在arc的环境下,释放车对象,释放人对象后,车对象和人对象还会各有一个强指针指向,并且强指针都是来自于对方。这种循环引用的话就会释放不完全,造成内存泄露。
在Person这个类里定义一个Car类型的车时,nonatomic后面用assign 或者 weak的话就只是赋值,或是一个弱指针指向车对象,当释放内存时,指向车对象的强指针被释放了后就只有一个弱指针指向,也会释放。这就可以解决上述的释放不完全的情况。
同样地,在Car类里定义Person类型的人时也可以用assign或者weak。
两个类里有一个用assign或者weak就可以解决。当然两个都用也可以。
- iOS中定义成员变量时@property(nonatomic, copy/strong/assign/weak)小结
- iOS--定义变量中的指示符assign、atomic(nonatomic)、copy、readonly、readwrite、retain、strong、weak、unsafe_unretained
- iOS @property中retain,copy, assign,strong,weak详解
- @property详解:nonatomic,retain,copy,assign,weak,strong
- iOS,@property,@synthesize, nonatomic,atomic,strong,weak,copy,assign,retain解析
- iOS中assign、retain、copy、weak、strong的区别以及nonatomic的含义
- iOS 中strong,weak,copy,assign区别
- copy retain assign nonatomic strong weak _unsafe_unretained
- assign©&ratain, strong&weak, nonatomic
- assign, copy, retain, nonatomic, strong, weak属性
- @property retain strong weak assign nonatomic @synthesize
- IOS属性(@property)的修饰词assign、weak、strong、retain、copy、nonatomic、atomic、readonly、readwrite解释、以及一部分内存优化方法
- 关键字(nonatomic/atomic)、(copy/retain/assign/strong/weak )、(readonly / readwrite)、(@property/@synthesiz
- @property 下 strong weak copy assign
- property属性的weak,strong,copy,assign
- iOS开发中@property的属性weak nonatomic strong readonly
- iOS开发中@property的属性weak nonatomic strong readonly
- iOS 中利用strong,copy,assign,weak修饰变量的异同点
- Setting模块深入分析
- Android Api Demos登顶之路(五十五)Service Messenger Service
- rtp丢包重传demo
- 创建层次二叉树
- 黑马程序员——多线程10:多线程相关练习
- iOS中定义成员变量时@property(nonatomic, copy/strong/assign/weak)小结
- ADO对SQL Server 2008数据库的基础操作
- 【LeetCode】141 Linked List Cycle (java实现)
- IOS-开发日志-UITextField属性
- 发送邮件代码
- Qt剪贴板复制失败的问题。
- 放苹果
- 【poj1011】木棒
- 【索引】Chapter 5. Graph Theory