GitHub

线程问题---在iPad上会崩溃,在iPhone上不会崩溃

应用的场景是在开发中使用了单选按钮-----在tableView上添加单选按钮操作,即点击就可以选中相应的操作,具体的界面展示如下:

这种情况下在iPhone 上展示选择并未有什么问题,但是当应用运行在iPad上的时候就会出现如下错误:

 

错误的原因很明显就是引用了已经释放掉的资源,这个资源就是:

设置了它的类型属性为assign 对象不会被持有,就导致了一个悲剧,在ipad上就崩溃了【iOS版本9.3.5】  直接将assign的属性
改成strong 就解决了这个问题----------原因:这个是因为assign可以指向被释放掉的内存, 修饰的对象为弱引用,参数对象的引用指针不会增加,
这样对象本身的作用是记录不同的对象的点击位置,当其指针不会改变时 空指针的问题,形成了崩溃。
   copy/retain/strong/assign/weak  都是对内存管理有影响的关键字
 1.copy NSString、block、可变的对象类型(NSMutableString、NSMutableArray、NSMutableDictionary等)
 2.retain可以在MRC/ARC环境中用于修饰对象类型的属性,当调用setter方法时,参数对象的引用指针会增加 1     
 3.strong 在ARC环境中用于修饰对象类型的属性 当调用setter方法时,参数对象的引用指针会增加 1
 4.assign 在MRC/ARC环境中,用于修饰基本数据类型或对象类型的属性;修饰对象类型的属性时表示弱引用,虽然可以使用参数对象,但是参数对象的引用指针不会增加
 5.weak 在ARC环境中使用,修饰对象类型,表示弱引用,虽然可以使用参数对象,但是参数对象的引用指针不会增加
retain 和 strong的区别:strong修饰的属性所指向的对象,当这个被引用的对象的引用计数(retainCount)为0时,系统会自动将对象对应的指针 置为 nil,并释放对应的内存空间,而retain修饰的是不会的,容易造成野指针,引起不明的崩溃 ,strong比retain 安全,但是只能在ARC环境使用
 assign 和 weak : 使用weak修的属性所指向的对象,引用计数为0以后,系统会将对象的指针置nil,assign修饰的属性时不会进行这个操作的,容易造成野指针,引起不明的崩溃 ,weak只能在ARC中使用,且weak不能修饰基本数据类型
 

 

posted @ 2017-05-15 17:06  windsSunShine  阅读(544)  评论(0编辑  收藏  举报