간단한 iPhone 응용 프로그램을 만들려고 노력 중이며 최근에 기능을 사용하여 놀았습니다. 분명히 "좋은 코드"로 인해 exc_bad_access로 인해 내 앱이 중단되기 때문에 메모리 관리와 관련하여 혼란 스럽습니다.objective-c 메모리 관리 설명
두 개의 데이터 멤버가있는 개체가 있으며 지금은 구현이 비어 있습니다.
@implementation semester: NSObject{
NSInteger ID;
NSString *name;
}
다음 내 위임 방법
- (void) receiveSemester:(semester *)newSemester {
[test setText:newSemester.name];
}
하고있는 형태로 사용되는 도면 :
@interface addSemesterController : UIViewController {
id<ModalViewDelegate> delegate;
UITextField *txtName;
UILabel *prompt;
UIButton *ok;
UIButton *cancel;
}
모든 객체 속성을 만들어 애플리케이션 파일에 합성된다. 여기에 대리자를 사용하는 방법입니다 :
- (IBAction) okClick:(id)sender{
// create semester object and return it
semester *created = [[semester alloc] init];
created.name = txtName.text;
[delegate receiveSemester:created];
[self dismissModalViewControllerAnimated:YES];
}
그리고 내 할당 해제의 방법은 다음과 같습니다 : 양식에 포함 된 개체의 deallocs으로
- (void)dealloc {
/*
[txtName dealloc];
[prompt dealloc];
[ok dealloc];
[cancel dealloc];
*/
[super dealloc];
}
이 주석, 내 애플 확인을 실행합니다.
// in main view controller
- (void) receiveSemester:(semester *)newSemester {
[test setText:newSemester.name];
// test is a UILabel
}
내가 좀비 방법을 시도하고 라벨이 출시 된 객체를 호출하는 것을 말한다 : 나는 그들을의 주석 그러나, 나는 나의 위임 프로토콜에 EXC_BAD_ACCESS 오류가 발생합니다. "form"컨트롤러에서 학기 객체를 공개하지 않을 것이며, 뷰를 할당 해제하기 전에 델리게이트 함수가 호출 되더라도 마찬가지입니다.
분명히 dealloc 메서드에서 개체를 공개해서는 안되며, 왜 내가해야하는지 분명하지 않습니다.
다시 도움을 요청 해주세요. 여기에 당신이 문제가있는 때문에, 대신 변수에 dealloc
를 호출하는 변수를 해제
[txtName 릴리스]; [프롬프트 릴리스]; [확인]; [석방 취소]; dealloc 대신에 ARC 자동 참조 카운트를 가지고 작업 할 수도 있습니다 ..... ARC를 사용하면 dealloc, release를 사용할 필요가 없습니다. 자동으로 메모리를 해제합니다 .... 그리고 새로운 것을 만들 때 시작에서 선택하십시오 프로젝트의 경우 편집을 통해 ARC에서 프로젝트를 변경할 수도 있습니다. – TheTiger
ARC 옵션을 찾을 수 없다면 죄송합니다. 어디입니까? – gamda
새 프로젝트를 만들 때 - 프로젝트 이름을 지정하는 창에서 아래에 하나의 옵션이 있음 - "Automatic Reference Counting 사용"이 확인란을 선택한 후 다음을 누릅니다. – TheTiger