2012-07-18 23 views
1

我想我已經看到了這一點,但是我無法找到它的文檔,因爲我不認爲我知道正確的條款。我需要知道如何編寫一個只能在另一個類中使用的特殊類,因此可以完全寫在其他類的實現中。如何在objective-c中的一個類中創建僅用於數據類型的數據類型?

基本上,我需要一個專門的NSMutableArray,可以做三個額外的東西:

  • 刪除最近的項目,一旦它的要求
  • 商店,在last_most_recent_item可變
  • 跟蹤項目是否不已添加新項目
  • 如果新項目尚未添加,並且要求數組中的最後一個對象,則返回last_most_recent_item而不是實際的最後一個項目

但是,這裏的東西,我只需要這個SpecialNSArray裏面的一個類。所以我想將該聲明和實現放在該類中,而不是單獨的文件中。我相信我已經看到了。有人知道這是什麼,我怎麼能做到這一點?

+0

我相信你需要在實現文件中創建一個私有接口。 – Popeye 2012-07-18 17:03:56

+2

這種事情可能更好地通過構圖而不是子類來處理(甚至通常是很好的工具類別)。看一下NSAttributedString的例子。 NSAttributeString不是NSString的子類。它有一個NSString。你可能想要同樣的關係。 – 2012-07-18 17:25:55

+0

有了組合,你是否必須通過(重新創建)組件類的所有訪問器(或者至少是你正在使用的),還是有另一種方法來實現? – Jim 2012-07-18 17:38:58

回答

4

爲此,只需將新類添加到要使用它的類的實現文件中即可。我認爲這被稱爲私人班。

假設你的類是MyClass的和改進的陣列MYARRAY中MyClass.m

在這種情況下MYARRAY上多餘的方法只能由編譯器看到的,如果他們是從MyClass的調用。

請注意,目標C中沒有任何私有方法,MyArray上的這些方法可以在程序中的任何位置從運行時調用,只是這些方法會在編譯時引發警告。

+0

感謝您的解決方案以及關於Objective-C隱私的額外解釋。 – 2012-07-18 23:37:33

3

我想你在描述NSMutableArray上的一個類別。

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/occategories.html

YourClass.m 
@interface NSMutableArray : (YourClassExtentions) 
@end 

@implementation NSMutableArray : (YourClassExtentions) 
@end 

@implementation YourClass() 
@end 

你也可以只創建單獨的M和H文件,然後導入類別。

+0

一個類別可以添加到任何地方,包括一個頭文件,所以不一定是特定於一個類的,所以絕對不是這個模式被稱爲的東西。然而,你的代碼確實符合要求,因爲@interface和類別的實現在YourCLass.m – Mark 2012-07-18 16:59:32

+2

正如adc所描述的,類別是一種乾淨的方式。你的規範要求通過子類化來實現一些持久性屬性,但是,正如你可能發現的那樣,NSArray沒有子類化,所以這不是一個選項。您可以考慮在您的類別中使用關聯的對象。 http://stackoverflow.com/questions/4071500/how-to-add-properties-to-nsmutablearray-via-category-extension在這個話題上有一個很好的接受答案。 – Jim 2012-07-18 17:16:36

+0

@Jim問題的關鍵在於把其他類放在文件中而不是它應該是一個類別 - 我同意一個類別可能是這裏的正確實現,但實現與OP正在執行的當前方式相同它。 – Mark 2012-07-18 17:28:33

1

您可以簡單地將該類的@interface MyInternalClass ...@implementation MyInternalClass ...代碼段放在.m文件中,用於「公共」類。將.行添加到.h中,以便您可以在「public」類的實例變量中聲明指向該類的指針。

相關問題