2011-03-16 46 views
0

使用NSMutableArray ivar,我打算編寫一個類似堆棧的類,並且應該能夠從中檢索各種類型的對象。如何使用各種類型的對象填充堆棧

無論何時該堆棧會因爲幾乎所有的對象都被檢索而威脅到對象,它應該通過從某種可能的「對象發射器」獲取它們來自動將新對象推到自身上。例如,應該有請求者類返回NSImages或NSString的實例,或者應該放在堆棧上的任何其他可以想象的類型,但是每個類型都必須事先以單獨的方式處理。

將這些對象發射類「插入」我的堆棧類最簡單的模式是什麼?堆棧類不需要知道它必須處理的對象類型,這是一些「輔助類」可能設置的地方 - 但我不知道它們的位置在哪裏。我嘗試使用NSClassFromString進行動態創建,但只是感覺不太正確。

回答

1

NSMutableArray能夠存儲任何對象。與Java中的泛型集合不同,數據結構存儲特定類的實例,Cocoa允許您將任何內容添加到NSArray中。所以,你的彈出方法可以簡單地刪除數組的最後一個對象,檢查大小是否小於某個閾值,然後從供應商類中請求新對象。

例如:

- (NSObject *)pop { 
     NSObject *poppedObject = [mutableArray lastObject]; 
     [mutableArray removeLastObject]; 
     if ([mutableArray count] < SMALLEST_ALLOWABLE_STACK_SIZE) { 
      for (MYContentProvider *provider in [self contentProviders]) { 
       [mutableArray addObjectsFromArray:[provider fetchContent]]; 
      } 
     } 
     return poppedObject; 
} 
+0

Java集合是由能夠存儲任何對象的默認值。只有通用版本才能執行任何類型的強制執行。 – 2011-03-16 21:45:26

+0

@Jonathan - 好點!編輯我的迴應以反映這一點。 – 2011-03-16 21:47:31

+0

不錯的代碼示例。你還應該添加一個推送方法。 :) – 2011-03-17 01:32:08