gpt4 book ai didi

ios - 为什么我必须保留/复制这个 NSString?

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

我最近在我的一个类(class)中重写了一些代码,这给了我一个 NSString 错误。这是我现在拥有的:

我的类(class)标题:

@interface MyViewController : UITableViewController {
NSString *myString;
}

@property (nonatomic, retain) NSString *myString; // Or copy instead of retain.

@end

并实现了一些方法:

- (void)viewDidLoad {
myString = @"This is";

if (something) {
myString = [NSString stringWithFormat:@"%@ a string.", myString]; // *1
}

[myString retain]; // <-- Why do I have to retain/copy here?
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0) {
/* Some code for creating a UITextView called myTextView */
// ..and then setting the text property:
myTextView.text = myString; // <-- Crashes here if I don't retain/copy in viewDidLoad.
}
}

经过一些调试后,我认为我必须保留/复制 NSString。

如果我想稍后使用它,为什么我必须保留/复制 viewDidLoad 中的 NSString?

此外,我注意到如果我删除标记为 *1 的行,我就不必保留/复制。

最佳答案

如果你使用合成setter方法给变量赋值,它会自动为你保留NSString:

if (something) {
self.myString = [NSString stringWithFormat:@"%@ a string.", myString]; // *1
}

关于ios - 为什么我必须保留/复制这个 NSString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8157530/

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