ARCを想定します。
#import <Foundation/Foundation.h>
@interface Foo:NSObject
@property (nonatomic,copy) NSString *myString;
@end
@implementation Foo
@synthesize myString = _myString;
- (void)setMyString:(NSString *)aString;
{
_myString = [[aString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] copy];
}
@end
int main(int argc, char *argv[]) {
@autoreleasepool {
Foo *someFoo = [[Foo alloc] init];
someFoo.myString = @"Blah ";
NSLog(@"Length = %ld",[[someFoo myString] length]); // prints 4
}
}
セッターでは、誰かが-のインスタンスを提供しようとした場合に備えて、セッターのパラメーターをコピーします。これは、元の文字列を変更することが期待されていないことをNSMutableString
前提としています。Foo
編集:または、手動の参照カウントの場合、セッターは次のようになります。
- (void)setMyString:(NSString *)aString;
{
if( aString != _myString ) {
[_myString release];
_myString = [[aString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] copy];
}
}