我有一个带有 NSString 属性的对象。我想为此属性使用自定义 setter ,以便它在设置字符串时始终修剪所有空格。
通常这是通过 NSString *blah2 = [blah stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
完成的,但我不确定如何为自定义 setter 制定此规则。在 setter 中使用这样的自动释放对象不是很糟糕吗?我应该改用可变字符串,然后将其转换为不可变字符串吗?
感谢你们提供的任何帮助。
最佳答案
我假设是 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];
}
}
关于objective-c - 在自定义 setter 中自动修剪 NSString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12452041/