内存管理中各属性值的区别

转载 2015年11月21日 16:29:37

   

 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 8 属性 内存管理组 对象控制组 重命名组 KVC键值编码

1.属性:帮你自动生成set和get方法 属性的格式: (1)@property  数据类型    属性名   属性的声明:写在(.h)中 属性:属性名就是实例变量声明 @property ...

深入C#内存管理来分析值类型&引用类型,装箱&拆箱,堆栈几个概念组合之间的区别

C#初学者经常被问的几道辨析题,值类型与引用类型,装箱与拆箱,堆栈,这几个概念组合之间区别,看完此篇应该可以解惑。   俗话说,用思想编程的是文艺程序猿,用经验编程的是普通程序猿,用复制粘贴编程的是...

int的一点事,读《深入C#内存管理来分析值类型&引用类型,装箱&拆箱,堆栈几个概念组合之间的区别》

今天稍有点空闲,本来想看看网页啥的,无奈老板坐镇,只好翻开《CLR VIA C#》 有些地方有点迷糊,准备敲代码试一下,打开学习用的项目,突然发现有个以前看《深入C#内存管理来分析值类型&引用类型,...
  • kofkyo
  • kofkyo
  • 2012年07月17日 09:21
  • 1302

css样式表和选择器的优先级以及position元素属性值的区别

css样式表和选择器的优先级以及position元素属性值的区别

Windows Phone 8.1中圆形图片或头像的制作、优化以及Stretch的四个属性值的区别

情况一:如果你原图是一个电脑壁纸,相当于1920*1200的那种,而你显示圆形图片或头像只需要显示其中的一部 分,那么你初期LOAD的时候,应用要用这个图片需要进行解码,这么大一个图片,解码就要耗很...

spring学习笔记——引用bean的属性值,动态管理网站参数与菜单项

我所在公司的开发框架很陈旧,功能上也有很多bug,唯一让我觉得NB的是这框架可以动态调整自己的界面菜单、子菜单,动态配置权限和各种参数。一直想知道这种功能的实现方式,今天看书,发现spring中对be...
  • gklifg
  • gklifg
  • 2013年11月12日 22:52
  • 813

display属性值block,inline和inline-block概念和区别

一、总体概念1、block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素)。block...

关于visibility的属性值visible,invisible,gone的区别

前言大家都知道visiblity这个属性,然后有些新手朋友可能会疑问,invisible与gone有什么区别,其实还是有区别的,接下来我用代码演示一遍就清楚了 visibility在xml文件的代...
  • W_ILU
  • W_ILU
  • 2016年03月19日 15:49
  • 547

iOS内存管理(4)--Block属性用copy修饰 & 避免循环引用的问题

一、Block的类型 根据Block在内存中的位置分为三种类型NSGlobalBlock,NSStackBlock, NSMallocBlock。 NSGlobalBlock:类似函数,位于te...
  • Winzlee
  • Winzlee
  • 2016年06月23日 20:35
  • 6069
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:内存管理中各属性值的区别
举报原因:
原因补充:

(最多只允许输入30个字)