1

来自 Apple 的Blocks 编程主题:块和变量

Objective-C 对象
当一个块被复制时,它会创建对块内使用的对象变量的强引用。

如果对象没有从 NSObject 扩展怎么办?这有关系吗?

例如,给定一个属性

@property(nonatomic, copy) FooBlock fooBlock;

以下是

-(void)foo:(NSObject<Foo>*)foo
{
    self.fooBlock = ^(){
        [foo bar];
    };
}

任何不同的

-(void)foo:(id<Foo>)foo
{
    self.fooBlock = ^(){
        [foo bar];
    };
}
4

1 回答 1

2

请注意,文档说的是对象变量,而不是NSOjbect变量。在此上下文中,所有 Objective-C 对象都被同等对待,无论它们的基类如何。

正如其他人指出的那样,您只需要确保您的对象响应通常的内存管理选择器 - 特别是保留和释放。

切线,请记住,从 NSObject 以外的基类派生通常是不明智的。这是可能的(例如 NSProxy),但它会很快变得非常复杂。确保您有充分的理由这样做。

于 2012-11-30T15:06:33.937 回答