我最近在我的一个类中重写了一些代码,这给了我一个NSString的错误。以下是我现在有:为什么我必须保留/复制这个NSString?
我的类的头:
@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的行,我不必保留/复制。
谢谢,这解决了它。 – matsr