objective-c - 在自定义 setter 中自动修剪 NSString?

标签 objective-c ios nsstring setter getter-setter

我有一个带有 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/

相关文章:

ios - 我必须从 .m3u8 格式的网址播放视频

iOS - UITextView 的设置文本抛出 EXC_BAD_ACCESS

objective-c - 如何用空格填充 NSString?

ios - loadFromPreferencesWithCompletionHandler : not called

ios - 两个目标,两个同名的头文件如何将每个头文件用于正确的目标?

ios - NSString.sizeWithAttributes 支持的属性键列表?

ios id 不转换为 nsinteger

iphone - 为什么我的 CLLocation 速度如此不准确?

iphone - 将具有大量子节点的 XML 解析为 UITableView

ios - 如何选择 PDF 中的文本行然后突出显示它们? (iOS)