1

有没有办法强制@property (strong, nonatomic)释放声明为强的类中的属性?

我收到了来自崩溃的报告,其中一个属性正在被释放,但随后应用程序试图从 AFHTTPRequest 中的 CompletionBlock 访问它们。但由于该属性被释放,应用程序崩溃了。

我无法重现该场景,因此我需要一些允许我强制释放该属性仅用于测试该场景的东西。

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

谢谢

4

4 回答 4

5

您不能在 ARC 下“强制”释放对象。但是,您可以(在某种程度上)通过将任何对象分配给 nil 而不在方法的其余范围内使用它来建议删除。如果您在访问解除分配的对象时遇到问题,那么您需要正好相反:保留拥有的对象,这样它就不会解除分配任何属性。

于 2013-03-13T13:36:26.610 回答
2

强制释放强属性中分配的内存的唯一方法是将其设置为 nil。

方法:

@property (nonatomic, strong) NSArray *testArray;

testArray = //array return from some method;

testArray = nil; //It'll release the memory associated
于 2013-03-13T13:37:20.203 回答
2

将 nil 设置为该对象以强制释放内存

前任 :

@property (nonatomic , strong) NSString *str;

str = nil;
于 2013-03-13T13:51:54.640 回答
2

我现在自己解决了同样的问题。

我在我的应用程序中的几个点设置了对 nil 的明显引用,但对象仍然不会消失。

该对象使用了计时器,这些计时器都对该对象具有强引用。一旦我使这些无效, dealloc 终于运行了!

正如其他人发布的那样,对对象的所有强引用必须为 nil 才能运行 dealloc。此外,在追踪这些参考资料时要绝对彻底!

于 2014-11-21T13:25:52.747 回答