2010-05-19 58 views
0

我在与以下类型的性能问题:内存管理“ID <ProtocolName> VARIABLENAME”类型属性

id<ProtocolName> variableName; 
..... 
..... 
@property (nonatomic, retain) id<ProtocolName> variableName; 

我可以访问并使用它们就好了,但是当我尝试调用

[variableName release]; 

我得到的编译器警告:

'-release' not found in protocol(s) 

我需要来定义界面的释放方法,或者怎么做我释放为变量保留的内存?

谢谢!

回答

3

使你的协议采用NSObject。

@protocol ProtocolName <NSObject> 
... 
+0

这假设你可以控制协议定义 - 但是如果你这样做,是的,这是一个很好的解决方案。 – Chuck 2010-05-19 08:15:56

+0

在这种情况下,我确实控制了协议定义 - 添加了NSObject并且它完美地工作。谢谢! :) – Malakim 2010-05-19 08:21:09

+2

只是略微扩大这一点。如果一个协议'AProtocol'不采用'NSObject'并且你收到一个类型为'id '的对象,你就不能认为该对象对'-retain'和'-release'做出了响应。 Objective-C中没有任何东西表示一个对象*有*可以从'NSObject'继承。 'NSObject'不是Objective-C语言的一部分,它是Foundation框架的一部分。 – JeremyP 2010-05-19 15:28:12

3

release在NSObject协议中,因此您可以声明它为id<ProtocolName, NSObject>以在类型系统内工作或将其转换为普通的id以阻止其类被类型检查。

1

您可以随时将NSObject添加到协议列表中。