0

我有一个带有 NSString 属性的对象。我想为此属性使用自定义设置器,以便在设置字符串时始终修剪所有空格。

通常这是用 完成的NSString *blah2 = [blah stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];,但我不确定如何为自定义设置器制定这个。在 setter 中使用这样的自动释放对象不是很糟糕吗?我应该改用可变字符串然后将其转换为不可变字符串吗?

感谢你们提供的任何帮助。

4

1 回答 1

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 中,如果有人试图提供一个实例,我会复制 setter 的参数NSMutableString- 假设它Foo不会修改原始字符串。

编辑:或者如果手动引用计数,设置器可能是:

- (void)setMyString:(NSString *)aString;
{
    if( aString != _myString ) {
        [_myString release];
        _myString = [[aString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] copy];
    }
}
于 2012-09-17T01:20:46.083 回答