[NSMutableArray array]와 [[NSMutableArray alloc] init]의 차이점
누군가가 다음과 같이 변경 가능한 배열을 선언하는 차이점을 말할 수 있습니까?
NSMutableArray *array = [NSMutableArray array];
과
NSMutableArray *array = [[NSMutableArray alloc] init];
처음에는 alloc을 사용하여 모든 배열을 선언했고 특정 함수가 끝날 때 alloc으로 만든 배열을 반환하면 메모리 누수 문제로 인해 해당 배열을 자동 해제해야했습니다.
이제 첫 번째 선언을 사용하여 아무것도 해제 할 필요가 없습니다.
감사
처음에는 alloc으로 모든 배열을 선언하고 특정 함수의 끝에서 alloc으로 만든 배열을 반환하면 메모리 누수 문제로 인해 해당 배열을 자동 해제해야했기 때문입니다. 이제 첫 번째 선언을 사용하여 아무것도 해제 할 필요가 없습니다.
그것은 당신이 물건을 "수집"할 때 정확히 맞습니다. 그러나 다른 경우에는 기성품 자동 해제 객체를 얻고 할당을 호출 한 다음 릴리스를 호출하는 것 중에서 선택할 수있는 iOS에서 객체를 생성 할 때 Apple은 객체의 수명을 유지하기 때문에 할당 및 해제를 사용하기를 원합니다. 짧고 당신의 통제하에.
여기서 문제는 자동 해제 된 오브젝트가 자동 해제 풀에 있으며 풀이 배수 될 때까지 쌓일 수 있다는 것입니다.
주의해야 할 또 다른 사항은 루프입니다. 자신도 모르게 자동 해제 된 오브젝트를 생성 할 수 있으며 풀에 쌓입니다. 해결책은 루프 시작시 자체 자동 해제 풀을 만들고 루프 끝에서 해제하여 루프를 통해 매번 개체가 해제되도록하는 것입니다.
편집 - 2011년 12월 18일 : 에서 iOS 5와 ARC의 도래와 함께, 오토 릴리즈 메커니즘은 훨씬 더 효율적이며, 같은 건 없다 그러나 release
오토 릴리즈 객체를 자동 판매기 ALLOC - 초기화 및 편의 생성자의 구분이 될 수 있도록, 무트. (또한 이제 자동 해제 @autoreleasepool
풀 (의사) 개체가 아닌 블록입니다.)
array
자체 클래스 방법은 당신이없는 (그리고 안) 수동으로 해제 의미 오토 릴리즈 배열을 생성합니다.
'Nice programing' 카테고리의 다른 글
구조체 또는 공용체에서 'unsigned temp : 3'은 무엇을 의미합니까? (0) | 2020.12.25 |
---|---|
MySQL의 BLACKHOLE Engine의 목적은 무엇입니까? (0) | 2020.12.25 |
Ruby에서 메모리 누수의 원인 찾기 (0) | 2020.12.25 |
FullCalendar 헤더 버튼이 없습니다. (0) | 2020.12.13 |
Java에서 IPv4 주소 유효성 검사 (0) | 2020.12.13 |