我该如何做?(初始化一个大的NSMutableArray)

3

把这个归类为“只是娱乐”,你会怎么做:

currencyLabels = [[NSMutableArray alloc] initWithObjects:@"Canadian Dollars", @"Euros", @"British Pounds", @"U.S. Dollars", @"United Arab Emirates Dirhams", @"Afghanistan Afghanis", @"Albania Leke", @"Armenia Drams", @"Netherlands Antilles Guilders", @"Angola Kwanza", @"Argentina Pesos", @"Aruba Guilders/Florins", @"Azerbaijan Manats", @"Bosnia/Herzegovina Convertible Marka", @"Barbados Dollars", @"Bangladesh Taka", @"Bulgaria Leva", @"Bahrain Dinars", @"Burundi Francs", @"Bermuda Dollars", @"Brunei Darussalam Dollars", @"Bolivia Bolivianos", @"Brazil Brazil Real", @"Bahamas Dollars", @"Bhutan Ngultrum", @"Botswana Pulas", @"Belarus Rubles", @"Belize Dollars", @"Congo/Kinshasa Congolese Francs", @"Switzerland Francs", @"Chile Pesos", @"China Yuan Renminbi", @"Colombia Pesos", @"Costa Rica Colones", @"Cuba Pesos", @"Cape Verde Escudos", @"Cyprus Pounds", @"Czech Republic Koruny", @"Djibouti Francs", @"Denmark Kroner", @"Dominican Republic Pesos", @"Algeria Algeria Dinars", @"Estonia Krooni", @"Egypt Pounds", @"Eritrea Nakfa", @"Ethiopia Birr", @"Fiji Dollars", @"Falkland Islands Pounds", @"Georgia Lari", @"Guernsey Pounds", @"Ghana Cedis", @"Gibraltar Pounds", @"Gambia Dalasi", @"Guinea Francs", @"Guatemala Quetzales", @"Guyana Dollars", @"Hong Kong Dollars", @"Honduras Lempiras", @"Croatia Kuna", @"Haiti Gourdes", @"Hungary Forint", @"Indonesia Rupiahs", @"Israel New Shekels", @"Isle of Man Pounds", @"India Rupees", @"Iraq Dinars", @"Iran Rials", @"Iceland Kronur", @"Jersey Pounds", @"Jamaica Dollars", @"Jordan Dinars", @"Japan Yen", @"Kenya Shillings", @"Kyrgyzstan Soms", @"Cambodia Riels", @"Comoros Francs", @"North Korea Won", @"South Korea Won", @"Kuwait Dinars", @"Cayman Islands Dollars", @"Kazakhstan Tenge", @"Laos Kips", @"Lebanon Pounds", @"Sri Lanka Rupees", @"Liberia Dollars", @"Lesotho Maloti", @"Lithuania Litai", @"Latvia Lati", @"Libya Dinars", @"Morocco Dirhams", @"Moldova Lei", @"Madagascar Ariary", @"Macedonia Denars", @"Myanmar (Burma) Kyats", @"Mongolia Tugriks", @"Macau Patacas", @"Mauritania Ouguiyas", @"Malta Liri", @"Mauritius Rupees", @"Maldives Rufiyaa", @"Malawi Kwachas", @"Mexico Pesos", @"Malaysia Ringgits", @"Mozambique Meticais", @"Namibia Dollars", @"Nigeria Naira", @"Nicaragua Cordobas", @"Norway Krone", @"Nepal Nepal Rupees", @"New Zealand Dollars", @"Oman Rials", @"Panama Balboa", @"Peru Nuevos Soles", @"Papua New Guinea Kina", @"Philippines Pesos", @"Pakistan Rupees", @"Poland Zlotych", @"Paraguay Guarani", @"Qatar Rials", @"Romania New Lei", @"Serbia Dinars", @"Russia Rubles", @"Rwanda Rwanda Francs", @"Saudi Arabia Riyals", @"Solomon Islands Dollars", @"Seychelles Rupees", @"Sudan Dinars", @"Sweden Kronor", @"Singapore Dollars", @"Saint Helena Pounds", @"Slovenia Tolars", @"Slovakia Koruny", @"Sierra Leone Leones", @"Somalia Shillings", @"Seborga Luigini", @"Suriname Dollars", @"El Salvador Colones", @"Syria Pounds", @"Swaziland Emalangeni", @"Thailand Baht", @"Tajikistan Somoni", @"Turkmenistan Manats", @"Tunisia Dinars", @"Tonga Pa'anga", @"Turkey New Lira", @"Trinidad and Tobago Dollars", @"Tuvalu Dollars", @"Taiwan New Dollars", @"Tanzania Shillings", @"Ukraine Hryvnia", @"Uganda Shillings", @"Uruguay Pesos", @"Uzbekistan Sums", @"Venezuela Bolivares", @"Viet Nam Dong", @"Vanuatu Vatu", @"Samoa Tala", @"Silver Ounces", @"Gold Ounces", @"East Caribbean Dollars", @"Palladium Ounces", @"Platinum Ounces", @"Yemen Rials", @"South Africa Rand", @"Zambia Kwacha", @"Zimbabwe Dollars",nil];

这是一个静态列表,永远不会改变。用于查找式的详细视图。

期待您的想法。:)


6
如果它永远不改变,为什么它可以被改变呢? :) - James J
2
糟糕的编码习惯,当然要避免! - clifgriffin
3个回答

6

即使它“永远不会改变”(顺带一提,这样说就会让事情出乎意料),我会将其存储在属性列表中,并使用arrayWithContentsOfFile:将其读入静态变量中。这样可以使代码更易读,并有可能可以重复使用它进行其他任务。


是的,实际上“永不改变”可能有些夸张了。这是来自第三方的信息,他们没有通过API公开列表。(噫) - clifgriffin

2

currencyLabels = [[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"currencyLabels" ofType:@"plist"]] retain];

这段代码是数据驱动的,因为不需要像这样硬编码配置,而且应该可以在不改变代码的情况下更改此类数据。通过NSBundle加载,因此如果需要,可以本地化plist文件。保留以匹配您示例中显示的对象所有权。


如果你想要一个非自动释放的数组,并且它包含文件的内容,你应该使用[[NSArray alloc] initWithContentsOfFile:path];。像那样使用retain会导致混淆,从而引起内存管理错误。 - Nick Forge
好的,我意识到我的对象所有权将与原始帖子不同,所以我在最后加了一个保留。如果需要保留,则使用initWithContentOfFile:会更清晰。 - Jonah

1

我还不太明白你期望得到什么样的答案……如果是为了代码简洁性,那么这种方法会有所帮助:

NSString *list = @"Canadian Dollars|Euros|British Pounds...";
NSArray *listItems = [list componentsSeparatedByString:@"|"];

你也可以将列表项保存到文本文件中,每个条目占一行。将该文件作为字符串加载,并通过换行符分隔以获取你的项目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接