内存管理中各属性值的区别
来源:互联网 发布:原语在c语言 编辑:程序博客网 时间:2024/05/16 14:41
strong,assign,retain,weak,copy的区别
strong与weak是由ARC新引入的对象变量属性
xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain和assign,是不支持ARC的。xcode 4.3(ios5和以上版本)之后就有了ARC,并且开始使用
strong与weak
assign: 用于非指针变量。用于
基础数据类型 (例如NSInteger)和C数据类型(int, float, double, char, 等),另外还有id
如:
@property (nonatomic, assign) int number;
@property (nonatomic, assign) id className;//id必须用assign
反正记住:前面不需要加 “*” 的就用assign吧
retain:用于指针变量。就是说你定义了一个变量,然后这个变量在程序的运行过程中会被更改,并且影响到其他方法。一般是用于字符串( NSString,NSMutableString),数组(NSMutableArray,NSArray),字典对象,视图对象(UIView ),控制器对象(UIViewController)等
比如:
@property (nonatomic,retain) NSString * myString;
@property (nonatomic, retain) UIView * myView;
@property (nonatomic, retain) UIViewController * myViewController;
xcode 4.2不支持ARC,所以会频繁使用retain来修饰,用完释放掉,而xcode4.3支持ARC,可以使用retian,不需要手动释放内存,系统会自动为你完成,如果你在xcode4.3上面开发,retian和strong都是一样的,没区别
strong和weak:
事实上
@property(nonatomic,strong) MyClass *myObject;就是相当于@property(nonatomic,retain) MyClass *myObject;@property(nonatomic, weak )id<RNNewsFeedCellDelegate>delegate;就是相当于@property(nonatomic,assign )id<RNNewsFeedCellDelegate>delegate;
现在系统自动生成的属性都是用weak来修饰的,我想应该是xcode 4.2不支持ARC,所以大家都是用retain。现在xcode4.3支持ARC了,于是苹果建议程序员放弃retain,以后都用weak。
weak 就是相当于assign,同样可以在xcode4.3开发环境下放弃使用assign 使用weak 来代替
copy:这个东西估计是大部分人最不容易搞明白的东西,我也搞不明白。听别人说这个东西基本不用了,效果其实和retain没什么两样,唯一的区别就是copy只用于NSString而不能用于NSMutableString。
不过好像当一个类继承NSObject,那么这个类里面的属性需要使用copy,比如:
#import <Foundation/Foundation.h>
#import <MapKit/MKAnnotation.h>
@interface Annotation : NSObject <MKAnnotation> {
CLLocationCoordinate2D coordinate;
NSString *title;
NSString *subtitle;
}
@property (nonatomic) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
@end
反正以后就这么用就是了
- 内存管理中各属性值的区别
- 属性的内存管理
- OC 属性的内存管理
- 系统中使用堆和栈管理内存的区别
- 内存管理中自动释放池与ARC的区别
- Android内存管理、Android中Dalvik和JVM的区别
- C++中内存管理五个存储区的区别
- 内存管理和属性特征的用法
- Objective C - 属性的内存管理:
- 变量的存储属性与内存管理
- 内存管理与属性的参数
- 【Java基础之内存管理】Java中栈内存与堆内存的区别
- Android内存优化六:系统中使用堆和栈管理内存的区别
- 内存管理和属性
- 属性与内存管理
- 内存管理属性字符串
- oc内存管理中retain属性对应的setter实际语法代码实现及原理
- IOS开发中属性常用的关键字以及作用 内存管理
- 神经网络编程入门
- leetcode_195_tenth_line
- AVL树学习笔记&模板
- 事务实现原理
- Poj 1787 Charlie's Change(多重背包 或者 记录的完全背包)
- 内存管理中各属性值的区别
- Android Studio 打包、生成jks密钥、签名Apk、多渠道打包
- 补间动画
- web service系列二(几个广义的web service实现).md
- Android SharePreference框架Favor详解
- centos6.5安装Mysql5.6版本
- 神经网络训练中的训练集、验证集以及测试集合
- 二叉树已知先序序列(后序序列)、中序序列求解后序序列(先序序列)
- 【Python】求数组(list)中最大的X个数,不递归,尽可能减少代码量