任何人都可以查看以下方法并告诉我是否有必要在使用后释放字典键的枚举器? 我是目标c的新手并不总是确定何时释放从SDK方法返回的变量。我想keyEnumerator方法返回一个自动释放的实例,所以当我完成它时我不必关心它。对?
嗯......这个方法可能还有什么问题吗? ;)
#import "NSDictionaryURLEncoding.h"
#import <Foundation/NSURL.h>
@implementation NSDictionary(URLEncoding)
-(NSString *)urlEncoded
{
NSEnumerator *keyEnum = [self keyEnumerator];
NSString *currKey;
NSString *currObject;
NSMutableString *result = [NSMutableString stringWithCapacity: 64];
while ((currKey = [keyEnum nextObject]) != nil)
{
if ([result length] > 0)
{
[result appendString: @"&"];
}
currObject = [[self objectForKey: currKey] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
currKey = [currKey stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[result appendString: [NSString stringWithFormat:@"%@=%@", currKey, currObject]];
}
return result;
}
@end
答案 0 :(得分:1)
如果您没有release
方法,那么绝对不能 alloc
您没有调用retain
方法的对象。请参阅Memory Management Programming Guide for Cocoa。
此外,如果您正在为iPhone OS编程,或者如果您的目标是Mac OS X 10.5或更高版本,我建议您使用for(... in ...)
语言构造来枚举您的词典。它比使用枚举器快得多。
for(NSString* currKey in self)
{
NSString* currObject = [self objectForKey:currKey];
// the rest of your loop code
}
您应该阅读Objective-C编程语言参考的Fast Enumeration部分。
作为一个友好的建议,我还建议你不要扩展NSDictionary或在其上创建一个类别,除非你真的非常需要它。