释放块内的对象

时间:2012-07-20 04:03:10

标签: objective-c cocoa objective-c-blocks

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

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

现在我将在块中使用此str对象。在内部块我将释放这个对象。 我是否需要像__block NSString *str = ..这样的前缀,因为iam在块内释放它? 根据规则,我了解如果我们想要修改块内的对象,我们需要使用__block作为前缀。但这条规则是否也适用于释放?

1 个答案:

答案 0 :(得分:3)

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

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