这是关于使用__block
释放块内的对象;块内释放对象
NSString *str = [SomeObject methodName]; // returned object is autoreleased
[str retain]; //retaining the object since its auto released
现在我将在块内使用此str
对象。内部块我会释放这个对象。 我是否需要像__block NSString *str = ..
这样的前缀,因为iam在块内释放它? 从规则我明白,如果我们想修改块内的对象,我们需要前缀__block
。但是这个规则适用于释放吗?
你不应该保留块之外的东西,并在块内释放它们。 Cocoa中的内存管理是本地的。每个范围只对自己负责。该块的身体没有保留它,所以不应该释放它。另外,不能保证块将被运行(在这种情况下,如果它负责释放,会发生泄漏),或者可能运行多次(在这种情况下,它将被过度释放)。 – newacct 2012-07-20 17:43:17