例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作:  1 在堆上分配一段内存用来存储@' MM的三室两厅 ' ,比如:内存地址为 0X1111  内容为 ' MM的三室两厅' ,  2 在栈上分配一段内存用来存储 houseForWife ,比如:地址为 0XAAAA  内容自然为 0X1111 下面分别看下(assign,retain,copy):  1.assign的情…
举个例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作:  1 在堆上分配一段内存用来存储@' MM的三室两厅 ' ,比如:内存地址为 0X1111  内容为 ' MM的三室两厅' ,  2 在栈上分配一段内存用来存储 houseForWife ,比如:地址为 0XAAAA  内容自然为 0X1111 下面分别看下(assign,retain,copy):  1.assign…
@property()常用的属性有:nonatomic,atomic,assign,retain,strong,weak,copy. 其中atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作. NSObject对象的@property属性时,默认为atomic,提供多线程安全. 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果.加了atomic,setter函数会变成下面这样: NSLock *_lock = [[NSLock alloc]ini…
atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作 1)atomic 设置成员变量的@property属性时,atomic是默认值,提供多线程安全 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果.加了atomic后setter函数会变成下面这样: {lock} if (property != newValue) { [property release]; property = [newValue retain]; } {unlock} 2)n…
一.先介绍 copy.strong.weak 的区别,如代码所示 @property(copy,nonatomic)NSMutableString*aCopyMStr; @property(strong,nonatomic)NSMutableString*strongMStr; @property(weak,nonatomic)NSMutableString*weakMStr; @property(assign,nonatomic)NSMutableString*assignMStr; NSMu…
copy:建立一个索引计数为1的对象,然后释放旧对象 对NSString对NSString 它指出,在赋值时使用传入值的一份拷贝.拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效.更深入的讨论,请参考“复制”部分. retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1对其他NSObject和其子类对参数进行release旧值,再retain新值指定retain会在赋值时唤醒传入值的retain消息.此属性只能用于Objective…
copy:建立一个索引计数为1的对象,然后释放旧对象 对NSString 对NSString 它指出,在赋值时使用传入值的一份拷贝.拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效.更深入的讨论,请参考“复制”部分. retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1对其他NSObject和其子类 对参数进行release旧值,再retain新值指定retain会在赋值时唤醒传入值的retain消息.此属性只能用于Objecti…
iOS编程过程中,经常看到一些属性前面有些修饰符,比如copy,retain等. 这些关键字,是Object-C语言中,对于Property的setter. Mac官网: The Objective-C Programming Language – Declared Properties – Setter Semantics 中的解释是: Setter Semantics These attributes specify the semantics of a set accessor. They…
虽然开发IOS好多年了.但是这几个关键词总是深深困扰着我.加上IOS开发从mRC到ARC的过渡,这些概念更为困扰我了. 先说weak与assign.weak只能修饰对象,不能修饰基本数据类型.而assign既可以修饰基本数据类型,也可以修饰对象.但一般用于修饰基本数据类型.因为当你用assgin修饰对象时候,如果你修饰的对象销毁,该指针的指向地址仍然存在.所以造成野指针.而这个野指针的内存在堆上,所以容易造成堆内存崩溃.而基本数据类型则存在于栈上,栈上内存系统会自动处理,不会造成野指针. Str…
以下内容来自Stackflow的详解 1.Nonatomicnonatomic is used for multi threading purposes. If we have set the nonatomic attribute at the time of declaration, then any other thread wanting access to that object can access it and give results in respect to multi-th…
- (void)fun{  NSString* str = [[NSString alloc] initWithString:@"string"];  NSLog(@"%d", [str retainCount]);}可以看到 str的计数器为-1 而把initWithString换成initWithFormat 计数器就是1 ------解决方案--------------------------------------------------------没有区别…
1.NSString类型的属性为什么用copy NSString类型的属性可以用strong修饰,但会造成一些问题,请看下面代码 #import "ViewController.h" @interface ViewController () @property(nonatomic,strong) NSString *nameStrong; @property(nonatomic,copy) NSString *nameCopy; @end @implementation ViewCon…
总结 关于属性的这些选项的学习,做一下总结: 所有的属性,都尽可能使用nonatomic,以提高效率,除非真的有必要考虑线程安全. NSString:通常都使用copy,以得到新的内存分配,而不只是原来的引用. strong:对于继承于NSObject类型的对象,若要声明为强使用,使用strong,若要使用弱引用,使用__weak来引用,用于解决循环强引用的问题. weak:对于xib上的控件引用,可以使用weak,也可以使用strong. __weak:对于变量的声明,如果要使用弱引用,可以使…
先一句话总结:strong类保持他们拥有对象的活着,weak类他们拥有的对象被人家一牵就牵走,被人家一干就干死.(strong是一个好大哥所以strong,呵呵,weak是一个虚大哥所以weak,呵呵) 比如有一个对象是string类,实例是@“hello” 现有两个strong的string指针大哥a和b都指向了hello,现在b大哥把改成了指向@“hi”.那么这时候a大哥指向的值是什么呢,答案还是“hello”.然后,a大哥看hi不错,也指向了hi,那么现在hello就被都抛弃了,也就从内存…
现在我们看看iOS5中新的关键字strong, weak, unsafe_unretained. 可以与以前的关键字对应学习strong与retain类似,weak与unsafe_unretained功能差不多(有点区别,等下会介绍,这两个新 关键字与assign类似).在iOS5中用这些新的关键字,就可以不用手动管理内存了,从java等其它语言转过来的程序员非常受用. strong关键字与retain关似,用了它,引用计数自动+1,用实例更能说明一切 @property (nonatomic,…
引用地址:http://www.aichengxu.com/view/32930 一.assign,copy,retain 1.copy是内容复制,新建一个相同内容的不同指针,retain为指针复制,相同内容的相同指针,引用计数都加1.assign只是复制,没有引用计数. 2.retain:释放旧的对象(release),将旧对象的值赋给新对象,再令新对象引用计数为1.我理解为指针的拷贝,拷贝一份原来的指针,释放原来指针指向的对象的内容,再令指针指向新的对象内容.copy:与retain处理流程…
关键词assign.strong.copy.weak.unsafe_unretained 影响: 是否开辟新的内存 是否有引用计数增加 strong 指向并拥有该对象.其修饰的对象引用计数会 +1,该对象只要引用计数不为 0 就不会销毁,置为 nil 可以销毁它.一般用于修饰对象类型.字符串.集合类的可变版本NSMutable. // .h 文件 @property (nonatomic, strong) NSMutableArray * nArr; // .m 文件 { NSMutableAr…
转载地址: http://www.lvtao.net/ios/504.html @property与@synthesize是成对出现的,可以自动生成某个类成员变量的存取方法.在Xcode4.5以及以后的版本,@synthesize可以省略. 1.atomic与nonatomicatomic:默认是有该属性的,这个属性是为了保证程序在多线程情况,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步问题.nonatomic:如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些…
@property的属性weak nonatomic strong等介绍(ios) 2014-12-02 18:06 676人阅读 评论(0) 收藏 举报 学习ios也已经快半个月了,也尝试做简单的应用程序,但是遇到很多问题,总结下来就是:急于求成,总想着做一个东西出来,里面的东西也不懂,只知道把这个复制到代码中就OK了,现在发现基础很重要,所以在此总结一下最基本的经常接触的weak nonatomic strong等功能: @property @synthesize关键字 注意:这两个关键字是…
ARC声明属性关键字详解(strong,weak,unsafe_unretained,copy) 在iOS开发过程中,属性的定义往往与retain, assign, copy有关,我想大家都很熟悉了,在此我也不介绍,网上有很多相关文章. 但是在iOS 5中加入ARC,产生了几个新的关键字strong, weak, unsafe_unretained.  我们可以将其与以前的关键字对应学习: strong与retain类似,weak和unsafe_unretained这两个新关键字与assign类…
转自:http://wenzongliang.iteye.com/blog/1746604 简单讲strong等同retain weak比assign多了一个功能,当对象消失后自动把指针变成nil,好处不言而喻.   nonatomic:非原子性访问,不加同步,多线程并发访问会提高性能.如果不加此属性,则默认是两个访问方法都为原子型事务访问.                    (atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误.…
import "ViewController.h" @interface ViewController () /*weak*/ @property (nonatomic,weak)UISwitch *weakSwitch; /*strong*/ @property (nonatomic ,strong)UISwitch *strongSwitch; /*weak*/ @property (nonatomic,weak)UIButton *weakButton; @end @implem…
IOS atomic与nonatomic,assign,copy与retain的定义和区别 atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作.         atomic 设置成员变量的@property属性时,默认为atomic,提供多线程安全. 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果.加了atomic,setter函数会变成下面这样:                         {lock}                …
深.浅拷贝 copy mutableCopy NSString NSString *string = @"汉斯哈哈哈"; // 没有产生新对象 NSString *copyString = [string copy]; // 产生新对象 NSMutableString *mutableCopyString = [string mutableCopy]; NSLog(@"string = %p copyString = %p mutableCopyString = %p&quo…
Here is a quick summary: A strong reference will keep the object it points to from being deallocated. Aweak reference will not. Thus instance variables and properties that are marked as weak are pointing atobjects that might go away. If this happens,…
深.浅拷贝 copy mutableCopy NSString 1 2 3 4 5 6 NSString *string = @"汉斯哈哈哈"; // 没有产生新对象 NSString *copyString = [string copy]; // 产生新对象 NSMutableString *mutableCopyString = [string mutableCopy]; NSLog(@"string = %p copyString = %p mutableCopyStr…
一.@property 这个关键词的唯一作用就是声明getter.setter方法接口. 二.@synthesize 实现setter.getter方法,找不到实例变量则主动创建一个. 三.nonatomic与atomic        atomic原子操作,提供多线程安全,setter方法会发生变化:基本来讲是防止在写未完成的时候被另外一个线程读取,造成数据错误,但是这种操作的弊端就是非常消耗内存资源,苹果手机的内存资源相当宝贵,所以没有使用多线程间的通讯编程,用nonatomic是一个不错的…
一..h和.m文件的变化说明 1.对于.h头文件,主要是将属性定义由retain变为strong @property (retain, nonatomic) 变为 @property (strong, nonatomic) 2.在ARC之前,我们经常在.m中使用分类拓展来增加私有的property @interface MJViewController () @property (nonatomic, retain) NSArray *data; @end 这 样做主要是简化实例对象的手动内存管…
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…
依旧本着尊重原创和劳动者的原则,将地址先贴在前面: http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html,作者Nonato 以下内容为转载: IOS的对象都继承于NSObject, 该对象有一个方法:retainCount ,内存引用计数. 引用计数在很多技术都用到: window下的COM组件,多线程的信号量,读写锁,思想都一样. (一般情况下: 后面会讨论例外情况)alloc 对象分配后引用计数为1retain 对象的引用…