我正在使用一些资源自学Objective-C,其中一个是通过iTunes U(2010年过去的课程)提供的Stanford iPhone Dev课程.
其中一项家庭工作任务要求我使用预定义的键和值列表(URL)填充可变字典.我能够将代码放在一起,但是当我看到它时,我一直认为可能有更好的方法让我接近我想要做的事情:
我真的很感激有关如何改进我所放在一起的任何反馈.我是初学者的定义,但我真的很享受学习Objective-C的挑战.
void bookmarkDictionary () {
NSMutableDictionary* bookmarks = [NSMutableDictionary dictionary];
NSString* one = @"Stanford University",
*two = @"Apple",
*three = @"CS193P",
*four = @"Stanford on iTunes U",
*five = @"Stanford Mall";
NSString* urlOne = @"http://www.stanford.edu",
*urlTwo = @"http://www.apple.com",
*urlThree = @"http://cs193p.stanford.edu",
*urlFour = @"http://itunes.stanford.edu",
*urlFive = @"http://stanfordshop.com";
NSURL* oneURL = [NSURL URLWithString:urlOne];
NSURL* twoURL = [NSURL URLWithString:urlTwo];
NSURL* threeURL = [NSURL URLWithString:urlThree];
NSURL* fourURL = [NSURL URLWithString:urlFour];
NSURL* fiveURL = [NSURL URLWithString:urlFive];
[bookmarks setObject:oneURL forKey:one];
[bookmarks setObject:twoURL forKey:two];
[bookmarks setObject:threeURL forKey:three];
[bookmarks setObject:fourURL forKey:four];
[bookmarks setObject:fiveURL forKey:five];
NSString* akey;
NSString* testString = @"Stanford";
for (akey in bookmarks) {
if ([akey hasPrefix:testString]) {
NSLog(@"Key: %@ URL: %@", akey, [bookmarks objectForKey:akey]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
您的代码看似正确,您认为有更好的方法是正确的.您可以减少临时变量的数量,并使用(非可变)NSDictionary而不是NSMutableDictionary通过为任务选择初始化程序:
NSDictionary *bookmarks = [NSDictionary dictionaryWithObjectsAndKeys:
[NSURL urlWithString:@"http://www.stanford.edu"], @"Stanford University",
[NSURL urlWithString:@"http://www.apple.com"], @"Apple",
//...etc...,
nil
];
Run Code Online (Sandbox Code Playgroud)
请注意-[NSDictionary dictionaryWithObjectsAndKeys:],与所有Cocoa工厂方法一样,创建一个实例autoreleased.如果您打算保留字典的所有权超过当前范围,则应该retain返回实例或使用alloc/initWithObjectsAndKeys:.
如果赋值(奇怪地)需要一个可变字典,你当然可以使用+[NSMutableDictionary dictionaryWithObjectsAndKeys:].
我碰巧更喜欢你使用的更明确的搜索形式.有些人可能会觉得(如果你在10.6),使用更实用的形式更好:
[bookmarks enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) {
if([key hasPrefix:testString]) { NSLog(@"Key: %@ URL: %@", key, value); }
}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1951 次 |
| 最近记录: |