gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:30:10 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com