iOS--合理定义对象的引用类型strong/weak/assign/copy

在ios中一定要合理使用对象的引用类型:

最佳原则:在ios中任何一个对象只有一个强引用

使用weak的情况:

1、懒加载的方式需要使用weak修饰:

如@property(nonatmic,weak) IBOutlet UILabel *lbl;

备注:所谓的懒加载就是指控件通过IB拖到根视图中,再通过连线的方式与ViewController中的属性对应起来。此种方式就相当于self.view执行了addSubview()方法,即self.view对该控件做了强引用,那么在viewController中只需要做弱引用即可。

使用strong的情况:

1、非懒加载(需要通过代码来alloc+init)

eg.未将控件拖到IB中,在h文件中声明了控件,在m文件中初始化了这个控件对象。此种情况需要在声明的时候,使用强引用。即:@property(nonatmic,strong) IBOutlet UILabel *lbl; 对应的后面应用有其初始化方法:lbl = [[UILabel alloc] init];

使用assign的情况:

1、对int、double、float、BOOL 等数值型对象的定义。

[email protected](nonatomic,assign) BOOL tf;

使用copy的情况:

1、对于NSString类型的对象定义:

[email protected](nonatomic,copy) NSString *strName;

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-17 16:37:52

iOS--合理定义对象的引用类型strong/weak/assign/copy的相关文章

ios中strong, weak, assign, copy

copy 和 strong(retain) 区别 1. http://blog.csdn.net/itianyi/article/details/9018567 大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有什么区别呢? 比如: @property (retain,nonatomic) NSString *rStr; @property (copy, nonatomic)   NSString *cStr; - (void)test: { NSMutabl

strong,weak,assign,copy,的用法和区别

stong和weak用来修饰指针的 strong强指针;\强引用,对象,ios5以前叫retain weak弱指针\若饮用,,UI控件,代理,iOS5以前叫weak copy:字符串,复制    深复制\浅复制 @property copy\weak\strong\assign\retain weak(assign):代理\UI控件*strong(retain):其他对象(除代理,UI控件\字符串以外的对象)copy :字符串assign:非对象类型(基本数据类型init\float\BOOL\

ARC声明属性关键字详解(strong,weak,unsafe_unretained,copy)

ARC声明属性关键字详解(strong,weak,unsafe_unretained,copy) 在iOS开发过程中,属性的定义往往与retain, assign, copy有关,我想大家都很熟悉了,在此我也不介绍,网上有很多相关文章. 但是在iOS 5中加入ARC,产生了几个新的关键字strong, weak, unsafe_unretained.  我们可以将其与以前的关键字对应学习: strong与retain类似,weak和unsafe_unretained这两个新关键字与assign类

iOS自己定义对象保存到本地文件

我是将聊天记录存到本地,里边用到了自己定义的对象.把数据转成Data格式存到本地.在转Data格式的时候报错了.这时候须要先将自己定义对象进行归档才干够转Data格式. 方法例如以下: 一.在.h文件里声明<NSCoding>协议 二.在.m文件里实现encodeWithCoder和intiWithCoder方法 归档之后就把对象存储到字典或数组里,转成Data格式的.再存储到本地就可以. 关于怎么把字典转成Data格式參见我的还有一篇文章: 地址:http://blog.csdn.net/m

ios中关键词weak,assign,copy.strong等的区别

虽然开发IOS好多年了.但是这几个关键词总是深深困扰着我.加上IOS开发从mRC到ARC的过渡,这些概念更为困扰我了. 先说weak与assign.weak只能修饰对象,不能修饰基本数据类型.而assign既可以修饰基本数据类型,也可以修饰对象.但一般用于修饰基本数据类型.因为当你用assgin修饰对象时候,如果你修饰的对象销毁,该指针的指向地址仍然存在.所以造成野指针.而这个野指针的内存在堆上,所以容易造成堆内存崩溃.而基本数据类型则存在于栈上,栈上内存系统会自动处理,不会造成野指针. Str

ios OC 关键字 copy,strong,weak,assign的区别

一.先介绍 copy.strong.weak 的区别,如代码所示 @property(copy,nonatomic)NSMutableString*aCopyMStr; @property(strong,nonatomic)NSMutableString*strongMStr; @property(weak,nonatomic)NSMutableString*weakMStr; @property(assign,nonatomic)NSMutableString*assignMStr; NSMu

strong,weak,assign的区别

使用assign:对基础数据类型(NSInteger)和C数据类型(int,float,double,char等).使用copy:对NSString:使用retain(引起引用计数加1):对其他NSObject(实例对象)和其子类: 属性关系有两种主要类型:strong和weak,相当于非ARC环境里的retain和assign.只要存在一个强引用,对象就会一直存在,不会被销毁. Objective-C中一直存在循环引用的问题,但在实际应用中很少出现循环引用.对于过去那些使用assign属性的地

IOS学习5-strong/weak/copy

strong.weak,copy的详解 对象使用strong,ui控件使用weak,字符串用copy 现在使用ARC,ARC判断准则:只要没有强指针指向对象中,找个对象就会被销毁. 1. Strong/weak 默认情况下下是强指针 Person *person = [[Person alloc] init]; 弱指针使用_weak修饰 对象使用strong,为了保证对象在属性也在. 如果:对象中有个属性是_weak类型,那么可能该属性指向的对象已经被销毁,而引发问题. 注意循环引用引发内存泄漏

[iOS基础控件 - 6.12.3] @property属性 strong weak copy

A.概念 @property 的修饰词 strong: 强指针/强引用(iOS6及之前是retain) weak: 弱智真/弱引用(iOS6及之前是assign) 默认情况所有指针都是强指针 使用 "__weak" 修饰的指针是弱指针 ARC准则:只要没有强指针指向,对象就会被销毁 @property属性的用法 * weak(assign) :  代理\UI控件* strong(retain) : 其他对象(除代理\UI控件\字符串以外的对象)* copy : 字符串 * assign