다음 두 예제는 각각 잘 작동하는 것 같습니다. 실시 예 1, 위젯은 while 루프 전에 생성된다alloc init을 사용하는 경우
-(int)compareWidgets { // Example 1
int count = 0;
NSMutableArray *widgetsCopy = [self.widgets mutableCopy];
Widgets *widget = [[Widgets alloc]init]; // HERE ? or...
while (widgetsCopy.count) {
widget = [widgetsCopy lastObject];
[widgetsCopy removeLastObject];
for (Widgets *compareWidget in widgetsCopy)
if (compareWidget.value == widget.value)
count += 1;
}
return count;
} 실시 예 2
,은 while 루프 내부에서 생성 위젯 ...
-(int)compareWidgets { // Example 2
int count = 0;
NSMutableArray *widgetsCopy = [self.widgets mutableCopy];
while (widgetsCopy.count) {
Widgets *widget = [widgetsCopy lastObject]; // HERE ?
[widgetsCopy removeLastObject];
for (Widgets *compareWidget in widgetsCopy)
if (compareWidget.value == widget.value)
count += 1;
}
return count;
}
1 : 예 1에서, 위젯은 한 번만 초기화되고 배열을 통해 반복 될 때마다 재 할당됩니다. 예제 2에서 alloc/init은 결코 사용되지 않지만 각 반복을 통해 위젯이 다시 할당됩니다. 이것이 가능한 이유는 무엇이며 어떤 예가 정확하거나 바람직합니까?
Q2 : [widgetsCopy removeLastObject] : 또한, 어느 경우 위젯 바로 그 배열로부터 제거 어레이 오브젝트에 할당된다. 객체 위젯이 배열에서 제거되었으므로 위젯은 현재 올바른 값을 유지하지 못하는 이유는 무엇입니까?
감사합니다.
[iOS 메모리 관리 기본 사항] (http://blog.teamtreehouse.com/ios-memory-management-part-1)을 읽어야합니다. 현대 iOS는 많은 상용구를 제거하는 ARC라는 시스템을 사용하지만 여전히 기본에 익숙해야하며 질문에서 판단하지 못합니다. – bdesham