0

任何人都可以查看以下方法并告诉我是否有必要在使用后释放字典键的枚举器?我是 Objective 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
4

1 回答 1

1

如果您也没有调用该方法,则您绝不能 调用对象。请参阅Cocoa 的内存管理编程指南releaseallocretain

此外,如果您正在为 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 编程语言参考的快速枚举部分。

作为一个友好的建议,我还建议您不要扩展 NSDictionary 或在其上创建类别,除非您真的非常需要它。

于 2010-01-28T00:25:12.930 回答