1

考虑以下代码 - 显然是非 ARC:

.  
.  
.  
NSString* someValueToSend= [NSString alloc] initWithString@"Send me! Will I survive?"];  

if([delegate respondsToSelector:@selector(giveMeYourString:)])  
{  
  [delegate performSelector:@selector(giveMeYourString:) onThread:someOtherThread withObject:someValueToSend waitUntilDone:NO];  
}  
[someValueToSend release];  
.  
.  
.  

根据应用程序中发生的其他情况,委托可能会或可能不会在 someValueToSend 释放之前运行该选择器。“系统”是否对对象进行了“礼貌”保留?

如果不是,并且我处于无法阻止的情况,那么在没有泄漏的情况下跨边界发送值的好策略是什么?自动释放?

我确实在其他地方找到了一个参考,说该对象被保留,但我在文档中没有看到......

任何输入表示赞赏。

4

1 回答 1

3

是的,系统将保留该对象。

而且,不,autorelease永远不能用来保护对象不被跨线程边界释放。从技术上讲,它可以在同步情况下,但不要那样做。

于 2013-07-02T16:16:33.307 回答