这是关于使用__block
释放块内的对象;
NSString *str = [SomeObject methodName]; // returned object is autoreleased
[str retain]; //retaining the object since its auto released
现在我将在块中使用此str
对象。在内部块我将释放这个对象。
我是否需要像__block NSString *str = ..
这样的前缀,因为iam在块内释放它?
根据规则,我了解如果我们想要修改块内的对象,我们需要使用__block
作为前缀。但这条规则是否也适用于释放?
答案 0 :(得分:3)
没有。您要修改的变量需要__block
。释放对象并不意味着修改变量。相反,它意味着向相关对象发送release
消息。就像其他任何消息一样,即使没有release
限定符,也没有理由不能将__block
发送到块内的对象实例。
您应该知道,对于非__block
限定的对象变量,该块将保留该对象。因此,虽然块中的显式release
可以在调用块之外/之前平衡retain
,但实际上不会释放对象(至少),直到块本身被释放,即使没有其他对象保留它。