English 中文(简体)
NSDictionary: URL-Encoding
原标题:

Can anyone please review the following method and tell me if it is necessary to release the enumerator for the dictionary keys after using it? I m new to objective c and not always sure, when to release variables returned from the SDK methods. I suppose the keyEnumerator method returns an autoreleased instance so I don t have to care about it when I m finished with it. Right?

Hmm.. maybe anything else wrong in this method? ;)

#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
最佳回答

You must never release objects for which you did not call the alloc method if you also didn t retain them. See the Memory Management Programming Guide for Cocoa.

Also, if you re programming for the iPhone OS or if you are targetting Mac OS X 10.5 or later, I suggest you use the for(... in ...) language construct to enumerate through your dictionary. It s much faster than using enumerators.

for(NSString* currKey in self)
{
    NSString* currObject = [self objectForKey:currKey];
    // the rest of your loop code
}

You should read the Fast Enumeration section of the Objective-C Programming Language Reference.

I also suggest, as a friendly advice, that you don t extend NSDictionary or create a category on it unless you really, really need it.

问题回答

暂无回答




相关问题
Asynchronous request to the server from background thread

I ve got the problem when I tried to do asynchronous requests to server from background thread. I ve never got results of those requests. Simple example which shows the problem: @protocol ...

objective-c: Calling a void function from another controller

i have a void, like -(void) doSomething in a specific controller. i can call it in this controller via [self doSomething], but i don t know how to call this void from another .m file. I want to call ...

ABPersonViewController Usage for displaying contact

Created a View based Project and added a contact to the AddressBook using ABAddressBookRef,ABRecordRef now i wanted to display the added contact ABPersonViewController is the method but how to use in ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

NSUndoManager and runModalForWindow:

I have a simple Core Data app which displays a list of entities in the main window. To create or add new entities, I use a second modal window with a separate managed object context so changes can be ...

NSMutableArray values becoming "invalid"

I m trying to show a database information in a tableview and then the detailed information in a view my problem is as follow: I created a NSMutableArray: NSMutableArray *myArray = [[NSMutableArray ...

iPhone numberpad with decimal point

I am writing an iPhone application which requires the user to enter several values that may contain a decimal point (currency values, percentages etc.). The number of decimal places in the values ...

热门标签