强制声明强大的属性dealloc

时间:2013-03-13 13:31:05

标签: ios objective-c properties memory-management

有没有办法可以强制声明为强@property (strong, nonatomic)的类中的属性被解除分配?

我收到了一个崩溃报告,其中一个属性正在被解除分配,但是应用程序试图从AFHTTPRequest中的CompletionBlock访问它们。但由于该属性已被解除分配,该应用程序崩溃了。

我无法重现该场景,因此我需要一些能够强制释放属性的内容,仅用于测试场景。

我尝试使用dealloc方法,但ARC禁止它。

由于

4 个答案:

答案 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。此外,在追踪这些参考资料时要绝对彻底!