최근에 내 수업 중 하나에 코드를 다시 작성하여 NSString에 오류가 발생했습니다. 나는 내가있는 NSString을/유지 복사했다 생각 디버깅 후왜이 NSString을 유지/복사해야합니까?
- (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.
}
}
: 몇 가지 방법을
@interface MyViewController : UITableViewController {
NSString *myString;
}
@property (nonatomic, retain) NSString *myString; // Or copy instead of retain.
@end
및 구현 :
내 클래스 헤더 : 여기에 내가 지금 가지고있는 것입니다.
나중에 NSString을 viewDidLoad에 유지/복사해야하는 이유는 무엇입니까?
또한 * 1로 표시된 줄을 제거하면 유지/복사 할 필요가 없습니다. 당신이 변수를 할당 합성 된 setter 메소드를 사용하는 경우
감사합니다. – matsr