2012-12-15 160 views
1

我正在試圖檢查一個類是否已經在iOS中實例化。如果它已經實例化,那麼我想釋放它。檢查一個類是否已經在iOS中實例化了

for (UIView* views in self.view.subviews) { 
     if ([views isKindOfClass:[CCGLView class]]) 
      [views removeFromSuperview]; 
    } 

對於那個時候我已經知道年代它是某種UIViews,但我要如何檢查其他類?

+0

入住這https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html – iDev

+1

你並不需要檢查。你可以在ObjC中消息零。 – CodaFi

+0

我正在尋找代碼示例。 –

回答

0

我想檢查一下,如果一個類已經在iOS中實例化。

你不需要。 Objective-C允許你消息無任何不良副作用。此外,子視圖不允許爲零,因爲它們被添加到內部的NSMutableArray中,反過來,它不允許將零指針添加到它自己。

因爲這是當我已經知道這是一種UIViews,但我如何檢查其他類?

如果你正在尋找釋放每一個的UIView(以及相關的子類),你並不需要在您的比較具體,看到基類(UIView的)是宣佈removeFromSuperview中,其中一個反過來,解決您的問題的釋放部分。當一個視圖從它的超級視圖中刪除時,它的引用計數減1。

現在我有了更多的上下文,你要求的是微不足道的。如果您使用的是ARC,此處的代碼片段將查找CustomClass類型的所有對象,然後將它們設置爲零。

for (NSObject *object in self.someCollection) { 
    if ([object isKindOfClass:[CustomClass class]]) 
     object = nil; 
} 

如果你使用MRC(如果你是,你到底是怎麼了?),那麼你應該,事實上,檢查它作爲一個積極的實例。

for (NSObject *object in self.someCollection) { 
    if ([object isKindOfClass:[CustomClass class]] && object != nil) { 
     [object release]; 
    } 
} 
+0

? Message nil如何檢查這個?我不太清楚。給出一兩行代碼來澄清。 –

+0

不,你在想這個太難。你不需要檢查一個對象是否爲零,因爲你可以消息零!如果你想發送無刪除超級視圖,你可以。 – CodaFi

+0

不,MyClass不是View類,它是某種類。無法刪除FromSuperview。 –

相關問題