在Objective-C,怎麼做這樣的事情是如何在編譯時填充NSArray?
int array[] = {1, 2, 3, 4};
純C
?
我需要用盡可能小的開銷(代碼和/或運行時)的NSStrings填充NSArray。
在Objective-C,怎麼做這樣的事情是如何在編譯時填充NSArray?
int array[] = {1, 2, 3, 4};
純C
?
我需要用盡可能小的開銷(代碼和/或運行時)的NSStrings填充NSArray。
不可能在編譯時像創建數組那樣創建數組。那是因爲它不是「編譯時間常量」。相反,你可以這樣做:
static NSArray *tArray = nil;
-(void)viewDidLoad {
[super viewDidLoad];
tArray = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
}
如果你有這樣的預編譯的,那麼我想你可以創建一個測試項目,創建一個數組(或其他物體)你需要,填充它,那麼它的真正重要的使用NSKeyedArchiver(將其保存到文件)將其序列化,然後將該文件包含在您的應用程序中。然後您將需要使用NSKeyedUnarchiver來解壓縮使用的對象。我不確定這兩種方法之間的性能差異。這種方法的一個優點是,如果你需要初始化一個包含很多對象的數組,那麼你沒有大塊代碼。
使用本
NSArray *array = [NSArray arrayWithObjects:str1,str2, nil];
值得注意的是,'str1,str2 ...'可以是像'@「一些字符串」'的NSString文字,就像它們將用於C數組初始化符一樣。我*認爲*這些字符串將在編譯時在圖像中插入。不要以爲你可以在運行時以外的地方初始化數組,但是,至少不能沒有一些醜陋的序列化黑客攻擊。 – walkytalky
這對我不起作用。我做了 NSArray * a = [NSArray arrayWithObjects:@「foo」,@「bar」,@「baz」,nil]; 和編譯器說「初始化器元素不是編譯時常量」。我需要在模塊中的幾個例程之間共享數組,所以我想要在任何例程之外聲明和填充數組...... – MoreFamed
-1正如MoreFamed指出的那樣,這絕對不會以他需要的方式工作。如果只需要用單一方法訪問'array',你的代碼*就會工作,但他需要在整個班級中訪問它。 – FreeAsInBeer
據我瞭解,你需要一個一維數組 您可以使用NSArray ..類方法例如
NSString *yourString;
NSArray *yourArray = [[NSArray alloc] initWithObjects:yourString, nil];
如果您需要更多,請提供一些關於你的問題的更多細節
-1你的答案與@ sheraza's有相同的問題。它不會提供整個班級的數組訪問權限。 – FreeAsInBeer
預編譯並不重要,因此您的解決方案對我來說非常合適。謝謝! – MoreFamed
這會在每次執行'viewDidLoad'時創建數組,'nil'測試會很好。 – Cristik