2009-06-30 55 views
2

我喜歡通過傳遞一個init值有助於設置的值來創建自定義類的實例。我重寫的初始化和實際更改它:有關NSString NSInteger和方法調用的objective-c問題

- (id)initWithValue:(NSInteger *)initialValue; 

我想這個值存儲在實例化對象的屬性和使用的價值生成將與它相關聯的一個UIImage的文件名。

我的問題是如何在Cocoa/Obj-C中做到最好。是一個NSInteger爲我的需要最好的參數或將NSString更好? 還是有另一種設計模式?我並不熟悉在這種情況下可用的所有創意方法。假設我的類屬性是:

@interface MyView : UIView { 
UIImage *image; 
NSInteger value; 

如果我堅持使用NSInteger的作爲參數,我可以輕鬆地分配給它。但是隨後需要從該值生成「image12.png」(假設NSInteger = 12)來設置我的UIImage。像「image」+ initialValue +「。png」。我相信的OBJ-C是冗長表示爲:

NSString *myValue = @"image"; 
[myValue stringByAppendingString:[initialValue stringValue]]; //NSInteger may not respond to stringValue?!? 
[myValue stringByAppendingString:@".png"] 

這是我的OBJ-C的理解分解。感覺像這樣應該會更容易,但我仍然感到困惑。

現在,如果initialValue是一個值爲@「12」的NSString,它可能是?那麼self.value = [initialValue integerValue];

我可以用多個stringByAppendingString調用來構建圖片。在其他語言中這麼簡單似乎很乏味。

什麼是最好的辦法來處理這樣的事情?

回答

9

你的init方法看起來很好,如果你只是處理整數值,你確實想使用NSInteger而不是NSString甚至NSNumber。你可能想改變的一件事是你傳遞的參數應該是(NSInteger),而不是(NSInteger *) - NSInteger不是一個對象,但在Objective-C中是一個類似於int的原始類型。

可以使用的NSString的stringWithFormat:選擇,因爲這樣的構建映像名稱:

NSInteger myInteger = 12; 
NSString *imageString = [NSString stringWithFormat:@"image%d.png", myInteger];
2

只是爲了什麼添提到的擴大,一個NSInteger實際上只是使用#define。在32位體系結構上,它相當於一個整型和64位體系結構,這是一個很長的過程。

如果您需要將整數視爲對象(例如將其放入NSDictionary中),則可以使用numberWithInteger:將其包裝在NSNumber的實例中。

希望有幫助!其他

+0

關於將NSInteger封裝在NSNumber中的好處! – Tim 2009-06-30 00:47:46

+0

實際上有一個numberWithInteger:方法,因爲NSInteger出現在10.5中,你會在類似NSUserDefaults的地方看到類似的方法。 – 2009-06-30 00:58:55

0

有一點要記住的是,雖然當你處理路徑的NSString給你stringByAppendingPathExtension:stringByAppendingPathComponent:,這兩者的處理之類的東西結尾的斜槓比,如果你只是使用stringByAppendingString:更好。

如果你更詳細地描述這個對象的功能以及它正在加載什麼樣的圖像,我可能會提供一些建議,如果我能想到創建文件名的更好方法,而不是僅僅傳遞數字。