有没有办法可以强制声明为强@property (strong, nonatomic)
的类中的属性被解除分配?
我收到了一个崩溃报告,其中一个属性正在被解除分配,但是应用程序试图从AFHTTPRequest中的CompletionBlock访问它们。但由于该属性已被解除分配,该应用程序崩溃了。
我无法重现该场景,因此我需要一些能够强制释放属性的内容,仅用于测试场景。
我尝试使用dealloc方法,但ARC禁止它。
由于
答案 0 :(得分:4)
您不能在ARC下“强制”取消分配对象。但是,您可以(通过将任何对象分配给nil而不是在方法的其余范围内使用它来推荐删除)。如果您在访问解除分配的对象时遇到问题,那么您需要恰恰相反:保留拥有对象,以便它不会释放任何属性。
答案 1 :(得分:1)
强制释放强属性中指定的内存的唯一方法是将其设置为nil。
意思是:
@property (nonatomic, strong) NSArray *testArray;
testArray = //array return from some method;
testArray = nil; //It'll release the memory associated
答案 2 :(得分:1)
将nil设置为该对象以强制释放内存
前:
@property (nonatomic , strong) NSString *str;
str = nil;
答案 3 :(得分:1)
我现在自己解决了同样的问题。
我在我的应用程序的几个点设置了明显的nil引用,但对象不会消失。
对象使用的是计时器,它们都对对象有强烈的引用。一旦我使那些无效,dealloc终于跑了!
正如其他人发布的所有对对象的强引用必须为nil才能运行dealloc。此外,在追踪这些参考资料时要绝对彻底!