On Jan 2, 2011, at 5:17 PM, Brian Durocher wrote:

> - (void) setCaption: (NSString*)input
> {
>    [caption autorelease];
>    caption = [input retain];
> }

For this (and for the rest of the NSString ivars), it’s generally better to use 
-copy rather than -retain. The reason for this is that it is perfectly valid to 
pass an NSMutableString to this method, since it is a subclass of NSString. If 
a caller gave you a mutable string and then changed it later, it could have 
unpredictable results for your object. Using -copy makes sure you have your own 
immutable copy of the string which can’t be changed (and as an optimization, if 
the string is already immutable, -copy just retains it, so it’s just as 
efficient).

> - (void) combineString: (NSString*) input1 : (NSString*) input2
> {
>    [temp autorelease];
>    temp = @"";
>    temp = [[temp stringByAppendingFormat:@" %@ %@ \n", input1, input2]
> retain];
> }

The autorelease is fine in terms of not causing memory leaks, but why are you 
assigning an empty string to temp immediately before you assign something else 
to it? That’s an unnecessary line of code. Actually, there’s a lot of 
unnecessary code here — why not just use the accessor method to set the string?

- (void) combineString: (NSString*) input1 : (NSString*) input2
{
   [self setTempString:[[self temp] stringByAppendingFormat:@" %@ %@ \n", 
input1, input2]];
}

In general, it’s a good idea to cut down on the direct use of ivars and use 
accessors as much as possible. This will make your design more flexible should 
you decide to change the underpinnings of something in the future.

Charles_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to