我有一个带有NSString属性的对象。我想为此属性使用自定义setter,以便在设置字符串时始终修剪所有空格。
通常这是使用NSString *blah2 = [blah stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
完成的,但我不确定如何为自定义设置器制定此功能。在setter中使用这样的自动释放对象不是很糟糕吗?我应该使用可变字符串,然后将其转换为不可变吗?
感谢您提供任何帮助。
答案 0 :(得分: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
}
}
在setter中,我会在有人试图提供NSMutableString
的实例的情况下复制setter的参数 - 假设Foo
不希望修改原始字符串。
修改强>: 或者,如果手动引用计数,则setter可能是:
- (void)setMyString:(NSString *)aString;
{
if( aString != _myString ) {
[_myString release];
_myString = [[aString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] copy];
}
}