我一直在看itunes上的CP193類,並且出現的常見信息是可重用性。Subclassing NSMutableArray
我正在創建一個具有NSMutableArray形式的列表的程序。我將一遍又一遍地訪問這個類。
所以我創建了一個功能一個NSMutableArray類設置NSString的數組
@interface Geology : NSMutableArray
- (void) setuparray;
在實現文件中我有
[super addobjects:@"object1"];
我想初始化這個對象與對象已內。我進口的頭文件我的ViewController裏面用下面的代碼:
Geology *geology = [[Geology alloc] initWithCapacity:5];
[geology setuparray];
NSLog(@"%@", [geology objectAtIndex:1];
但是程序沒有與下面的錯誤編譯:
終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,原因是:「* - [NSMutableArray initWithCapacity:]:僅爲抽象類定義的方法。定義 - 地質學initWithCapacity:]!
因此,我需要定義我的新文件中的容量。但是,即使我在文件中添加[Super initWithCapacity],它仍然不起作用?
編輯:
Geology.h
@interface Geology : NSMutableArray
- (void) setupGeology;
@end
Geology.m
@implementation Geology
- (void) setupGeology{
[super initWithCapacity:1];
[super addObject:@"object1"];
}
@end
在我的ViewController我有
#import "Geology.h"
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
Geology *geology = [[Geology alloc] initWithCapacity:5];
[geology setupGeology];
NSLog(@"%@", [geology objectAtIndex:1]);
}
可以顯示地質學的.h和.m嗎? –
NSArray是一個類集羣。所以即使你看到的暴露類是NSArray和NSMutableArray,那些只是接口。你回來的實際對象可能來自無數的課程。這就是爲什麼從類集羣進行子類化通常是個壞主意。但是,如果您必須繼承子類,那麼請閱讀文檔中的子類註釋。基本上,還有一些方法需要從NSMutableArray和NSArray中重寫。 – Anurag
啊謝謝你。我想我會放棄這個想法,只是重用代碼。 – nimbus