iphone - 在 objective-C (iphone) 中,如何管理 '@protocol' 引用的内存?

标签 iphone objective-c memory-management

我认为我对 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 (和 releaseautorelease )在 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/

相关文章:

ios - 是否有可能使 xcode 编译不停?

ios - 如何在iOS中触摸屏时隐藏键盘

c - 如何释放C中列表列表中的节点? (游戏)

javascript - 为什么函数创建并返回的对象在函数执行结束后还继续存在?

javascript - 是否可以在移动设备旋转时使用 Javascript/CSS 交换样式表?

javascript - IPhone 的网站主题 - 基本成分是什么?

ios - iPad 中的方向框架不改变

ios - Appdelegate 前台/后台/事件/非事件进程

.net - .Net应用程序中极端私有(private)字节使用分析, native 内存泄漏?

iphone - UItextview在iPhone应用程序中上下移动(当键盘出现和消失时)