iOS retain、strong、weak、assign

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 来代替

unsafe_unretained 
unsafe_unretained 就是ios5版本以下的 assign ,也就是 unsafe_unretained , weak, assign 三个都是一个样的。 因为 ios5用的是 weak ,那在ios4.3就用不了,如果你将 weak 修改为 unsafe_unretained ,那就可以用了。说到底就是iOS 5之前的系统用该属性代替 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
反正以后就这么用就是了

反正就记住一点:xcode4.2用retain和assign ;xcode4.3或以上版本用strong与weak 。以前用xcode4.2开发程序的程序员会习惯用retain ,所以代码都是retian的,新手如果从xcode4.3学起的话就用strong与weak  吧

最新文章

  1. ionic第二坑——ionic 上拉菜单(ActionSheet)安卓样式坑
  2. Windows Phone 8 下载文件进度
  3. 【@Transactional】Spring 之注解事务 @Transactional
  4. javascript中字符串常用操作整理
  5. 2782: [HNOI2006]最短母串
  6. linux c语言 select函数用法
  7. thinkphp---ajax实现删除
  8. arcgis api 3.x for js 入门开发系列十二地图打印GP服务(附源码下载)
  9. bzoj1997 [HNOI2010]平面图判定Plana
  10. 【jQuery Demo】图片切换效果整理
  11. Diffuse贴图+Lightmap+Ambient
  12. 一群猴子排成一圈,按1,2,...,n依次编号
  13. Twisted 简介
  14. 【Ansible 文档】【译文】常见问题
  15. kubernetes实战(二十五):kubeadm 安装 高可用 k8s v1.13.x
  16. Python装饰器的高级用法(翻译)
  17. angular 路由动态加载JS文件
  18. git如何在自动生成补丁时指定补丁名的起始编号
  19. Field Security Profile Helper
  20. JSON和JSONP简单总结

热门文章

  1. CXF整合Spring发布WebService实例
  2. 对pymysql的简单封装
  3. linux之间连接—使用SSH
  4. cisco tftp 备份/恢复
  5. .Net实现的批量删除(使用了repeater控件)
  6. Median of Two Sorted Arrays-----LeetCode
  7. Dom操作的分类
  8. python安装(windows)
  9. C:指针、数据类型、格式化输入输出、输入函数的坑点
  10. [p2p]UDP用打洞技术穿透NAT的原理与实现