我认为我对 objective-c 的内存管理有很好的处理,但我无法弄清楚以下情况:
@protocol MyProtocol
@end
@interface MyObject : NSObject {
id<MyProtocol> reference;
}
@property (nonatomic, retain) id<MyProtocol> reference;
@end
@implementation MyObject
@synthesize reference;
-(void) dealloc {
[reference release];
[super dealloc];
}
...
@end
这给了我一个“警告:'-release' not found in protocol(s)”。 我可以放心地忽略这个错误吗?还是我做错了什么?
最佳答案
是的,您可以安全地忽略此错误。声明为类型 id<MyProtocol>
的对象不能继承自 NSObject
(您没有使用 Cocoa 库在 Objective-C 中编程,甚至在 Cocoa 中还有其他根类,例如 NSProxy
)。自 retain
(和 release
, autorelease
)在 NSObject
中声明,编译器无法知道声明为类型 id<MyProtocol>
的实例响应这些消息。为了解决这个问题,Cocoa 还定义了 NSObject
协议(protocol) 镜像 NSObject
应用程序接口(interface)。如果您将协议(protocol)声明为
@protocol MyProtocol <NSObject>
@end
表示MyProtocol
扩展 NSObject
协议(protocol),您将被设置。
关于iphone - 在 objective-C (iphone) 中,如何管理 '@protocol' 引用的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/855441/