Nice programing

[NSMutableArray array]와 [[NSMutableArray alloc] init]의 차이점

nicepro 2020. 12. 25. 22:54
반응형

[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자체 클래스 방법은 당신이없는 (그리고 안) 수동으로 해제 의미 오토 릴리즈 배열을 생성합니다.

참조 URL : https://stackoverflow.com/questions/5423211/difference-between-nsmutablearray-array-vs-nsmutablearray-alloc-init

반응형