zoukankan      html  css  js  c++  java
  • 线程问题---在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不能修饰基本数据类型
     
  • 相关阅读:
    LeetCode 769. Max Chunks To Make Sorted
    LeetCode 845. Longest Mountain in Array
    LeetCode 1059. All Paths from Source Lead to Destination
    1129. Shortest Path with Alternating Colors
    LeetCode 785. Is Graph Bipartite?
    LeetCode 802. Find Eventual Safe States
    LeetCode 1043. Partition Array for Maximum Sum
    LeetCode 841. Keys and Rooms
    LeetCode 1061. Lexicographically Smallest Equivalent String
    LeetCode 1102. Path With Maximum Minimum Value
  • 原文地址:https://www.cnblogs.com/windsSunShine/p/6857238.html
Copyright © 2011-2022 走看看