对象的NSMutableArray
首先我对Objective C和iPhone编程非常陌生。现在已经不存在了。我已经阅读了大部分关于这个和一些第三方手册的Apple文档。对象的NSMutableArray
我想我只是想知道如果我要对这个正确的方法...
- (NSMutableArray *)makeModel {
NSString *api = @"http://www.mycoolnewssite.com/api/v1";
NSArray *namesArray = [NSArray arrayWithObjects:@"News", @"Sports", @"Entertainment", @"Business", @"Features", nil];
NSArray *urlsArray = [NSArray arrayWithObjects:
[NSString stringWithFormat:@"%@/news/news/25/stories.json", api],
[NSString stringWithFormat:@"%@/news/sports/25/stories.json", api],
[NSString stringWithFormat:@"%@/news/entertainment/25/stories.json", api],
[NSString stringWithFormat:@"%@/news/business/25/stories.json", api],
[NSString stringWithFormat:@"%@/news/features/25/stories.json", api], nil];
NSMutableArray *result = [NSMutableArray array];
for (int i = 0; i < [namesArray count]; i++) {
NSMutableDictionary *objectDict = [NSMutableDictionary dictionary];
NSString *name = (NSString *)[namesArray objectAtIndex:i];
NSString *url = (NSString *)[urlsArray objectAtIndex:i];
[objectDict setObject:name forKey:@"NAME"];
[objectDict setObject:url forKey:@"URL"];
[objectDict setObject:@"NO" forKey:@"HASSTORIES"];
[result addObject:objectDict];
}
return result;
}
结果的输出是...
(
{
HASSTORIES = NO;
NAME = News;
URL = "http://www.mycoolnewssite.com/api/v1/news/news/25/stories.json";
},
{
HASSTORIES = NO;
NAME = Sports;
URL = "http://www.mycoolnewssite.com/api/v1/news/sports/25/stories.json";
},
{
HASSTORIES = NO;
NAME = Entertainment;
URL = "http://www.mycoolnewssite.com/api/v1/news/entertainment/25/stories.json";
},
{
HASSTORIES = NO;
NAME = Business;
URL = "http://www.mycoolnewssite.com/api/v1/news/business/25/stories.json";
},
{
HASSTORIES = NO;
NAME = Features;
URL = "http://www.mycoolnewssite.com/api/v1/news/features/25/stories.json";
}
)
任何有识之士将不胜感激;-)
看起来不错。如果你在意,可以有一些小的改进。
[NSString stringWithFormat:@"%@/news/news/25/stories.json", api]
可以通过
[api stringByAppendingString:@"/news/news/25/stories.json"]
如果没有机会的api
出现在中间或接受其他的参数来代替。
2.
NSString *name = (NSString *)[namesArray objectAtIndex:i];
NSString *url = (NSString *)[urlsArray objectAtIndex:i];
的明确的转换是不必要的。一个id
可隐式转换为其他ObjC对象和从其他ObjC对象。
你可以使用一个方便的方法-dictionaryWithObjectsAndKeys:
构建字典一拍,所以你并不需要一个temperary字典信息:
[result addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:
name, @"NAME",
url, @"URL",
@"NO", @"HASSTORIES", nil]];
4.(可选)
此变换如果函数不是热点是没有用的。
由于阵列只能在本地使用,它是更有效地使用C数组。
static const int arraySize = 5;
NSString* namesCArray[] = {@"News", @"Sports", @"Entertainment", @"Business", @"Features"};
NSString* urlsCArray[arraySize];
urlsArray[0] = [api stringByAppendingString:@"/news/news/25/stories.json"];
...
for (int i = 0; i < arraySize; ++ i) {
...
NSString* name = namesCArray[i];
NSString* url = urlsCArray[i];
...
}
这消除重复-count
和-objectAtIndex:
电话直接元素访问相比是非常缓慢的。
5.(可选)
这个转换是没有用的,如果数组短。
你可以使用快速枚举遍历一个ObjC容器:
int i = 0;
for (NSString* name in namesArray) {
NSString* url = [urlsArray objectAtIndex:i];
...
++ i;
}
6。
通常我们使用[NSNumber numberWithBool:NO]
来代表盒装的真/假值,而不是字符串@"NO"
。每当原始数字(int
,float
等)不能被使用(例如被存储在NSArray中)时,NSNumber也被使用很多。我不知道你的API是否明确需要一个字符串NO,所以它可能不适合你。
哇!这是肯尼的好东西。我现在有更多的研究要做这些话题。谢谢你送我在不同的方向;-) – 2010-04-11 15:25:31
顺便肯尼。我向http://code.google.com/p/networkpx/ 上的Google Code项目捐赠了5美元;再次感谢;-) – 2010-04-11 15:31:39
特里,我会认真考虑http://ericasadun.com/并阅读iPhone食谱。它让我起床,并在2周内进入。我是一位perl程序员,Erica的书对我的要领和一些巧妙的技巧足够熟悉。 ps:好的问题,tho。 – Jann 2010-04-15 04:24:13
也许...你想完成什么? (例如,你在检查什么部分是正确的?) – 2010-04-11 14:35:28