1

这是关于__block用于释放块内的对象;

NSString *str = [SomeObject methodName]; // returned object is autoreleased
[str retain];   //retaining the object since its auto released 

现在我将str在一个块内使用这个对象。在块内我将释放这个对象。我是否需要在前面加上 like __block NSString *str = ..,因为我在块内释放它?从规则中我了解到,如果我们想修改块内的对象,我们需要在前面加上__block. 但这条规则是否也适用于发布?

4

1 回答 1

3

要修改的变量__block需要编号。释放一个对象并不意味着修改一个变量。相反,它意味着向相关对象发送消息。与任何其他消息一样,即使没有限定符,也没有理由不能发送到块内的对象实例。releaserelease__block

您应该知道,对于非__block限定对象变量,该块将保留该对象。因此,虽然您release在块内的显式可能会平衡retain外部/在调用块之前,但该对象实际上不会被释放(至少)直到块本身被释放,即使没有其他对象保留它。

于 2012-07-20T04:04:49.547 回答