NSDictionary: URL-кодировка - PullRequest
       7

NSDictionary: URL-кодировка

0 голосов
/ 28 января 2010

Может кто-нибудь рассмотреть следующий метод и сказать мне, если необходимо освободить перечислитель для словарных ключей после его использования? Я новичок в цели 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

1 Ответ

1 голос
/ 28 января 2010

Вы никогда не должны release объекты, для которых вы не вызывали метод alloc, если вы также не retain их. См. Руководство по программированию управления памятью для какао .

Кроме того, если вы программируете для 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
}

Вы должны прочитать раздел Fast Enumeration Справочника по языку программирования Objective-C.

В качестве дружеского совета я также советую вам не расширять NSDictionary и не создавать для него категорию, если вам это действительно не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...