在构建iPhone模拟器时,我无法构建一个非常简单的程序。然而,它可以为设备编译好!
编译器不喜欢的示例代码:
@protocol Invokable
- (id) invoke: (id)arg with:(id)data;
@end
@interface Worker : NSThread
{
NSAutoreleasePool* memoryPool;
}
- (void) invoke:(id)target selector:(SEL<Invokable>)selector arg:(id)arg data:(id)data;
//........
@end
问题在于使用'SEL' - 编译器在每次使用时都抱怨“合格类型不是有效对象”。
我在Snow Leopard上运行xcode 3.2.1。我对此感到很困惑,因为我的构建配置完全没有变化。
答案 0 :(得分:2)
这里的答案不明显,但编译器是正确的。类型SEL
实际上只是一个typedef'd char*
,而不是Objective-C对象。
因此,以及协议仅适用于Objective-C对象的事实,您无法在SEL
类型上指定协议。