2010-05-19 60 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添加到協議列表中。