我有一段時間的iPhone開發工作。第一次,我對Objective-C中的內存管理感到很驚訝:)。但現在我瞭解了一點。如何釋放協議屬性?
問題是,有時候,我使用協議作爲類的屬性,因爲我認爲它的定義與C#或Java中的'interface'非常相似。如下所示。
@protocol Shield
...
@end
// Interface
@interface Dragon {
id<Shield> shield
NSString * name;
}
@property (nonatomic,retain) id<Shield> shield;
@property (nonatomic,retain) NSString * name;
@end
但我總是釋放dealloc()方法中的任何屬性對象。如下所示。
-(void)dealloc {
[name release];
[shield release]; // <--- Totally impossible. xcode said '-release not found in protocol'
[super dealloc];
}
如您所見,我無法釋放協議。那麼這會導致我未來的記憶問題?你有另一種方式來處理這個解決方案來給我建議嗎?
下面iKenndac的回答是正確的方法。或者,您可以將ID轉換爲符合NSObject協議的ID並調用發佈方法。 '[(id
nash
2009-11-26 12:59:11