来自Apple的Blocks Programming Topics: Blocks and Variables
Objective-C对象
复制块时,它会创建对块中使用的对象变量的强引用。
如果对象没有从NSObject扩展怎么办?这有关系吗?
e.g。鉴于
的属性@property(nonatomic, copy) FooBlock fooBlock;
是以下
-(void)foo:(NSObject<Foo>*)foo
{
self.fooBlock = ^(){
[foo bar];
};
}
与
不同-(void)foo:(id<Foo>)foo
{
self.fooBlock = ^(){
[foo bar];
};
}
答案 0 :(得分:2)
请注意,文档说明对象变量,而不是 NSOjbect 变量。无论基类如何,所有Objective-C对象在此上下文中都被视为相同。
正如其他人所指出的那样,您只需要确保您的对象响应通常的内存管理选择器 - 特别是保留和释放。
切向地,请记住,从NSObject之外的基类派生通常是不明智的。这是可能的(例如NSProxy),但它可以非常快速地变得非常复杂。确保你有充分的理由这样做。