2013-08-30 43 views
1

我有一組不同類的實例(準確地說是9個),所有類都具有相同的方法和屬性,但每個類都執行特定的任務。在一個屬性中存儲任意數量的不同類

我希望能夠在任意點之間切換這些不同的對象。有時候只有少數對象被使用,有時甚至全部被使用時,以及其他時候只有一個被使用。

理想情況下,我想要一個可指向任何這些對象的實例的屬性。香港專業教育學院試圖做這樣的事情:

@property (nonatomic, strong) id * currentObj; 
... 
currentObj=[[ClassType3 alloc] init]; 

ClassType3僅僅是9個不同的類別之一,在這個例子中,他們從去到ClassType1ClassType9

但是,這並不工作,我得到這兩個警告:

Property with 'retain (or strong)' attribute must be of object type. 
Pointer to non-const type 'id' with no explicit ownership. 

我的問題是,能像這樣來實現,或者我需要創建的每個以防萬一需要使用類的一個實例?

回答

7

id已經是一個指針。

變化

@property (nonatomic, strong) id * currentObj; 

@property (nonatomic, strong) id currentObj; 

此外,請使用類大寫的名稱。

+0

Doh!我沒有意識到id已經是一個指針了。由單個星號引起的很多問題。非常感謝! – Jimmery

9

Gabriele給出了一個正確的答案。然而, 如果所有的類具有相同的方法和屬性,就應該考慮到

  • 使所有的類都是從一個共同的超類繼承和財產申報作爲

    @property (nonatomic, strong) SuperClass * currentObj; 
    
  • OR定義一個@protocol其中包括常見的方法/屬性,使所有 類符合該協議,並宣佈屬性爲

    @property (nonatomic, strong) id <YourProtocol> currentObj; 
    

的優勢,在這兩種情況下是編譯器可以做更多/更好的錯誤時 的屬性分配或使用檢查。

+0

感謝您的建議,我現在正在研究這些。 – Jimmery

+0

+1一套很好的建議 –

相關問題