2012-09-17 65 views
0

我有一個對象W/NSString屬性。我想爲該屬性使用自定義setter,以便在設置字符串時始終修剪所有空格。在自定義setter中自動修剪NSString?

通常這是用NSString *blah2 = [blah stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];完成的,但我不確定如何爲定製setter制定這個。在setter中使用像這樣的autoreleased對象不壞嗎?我應該使用可變字符串,然後將其轉換爲unmutable?

感謝您提供任何幫助。

回答

3

我打算推定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]; 
    } 
} 
+0

我不使用ARC。抱歉,應該指定。是不是沒有ARC? – DOOManiac

+0

謝謝!這正是我需要的。 – DOOManiac