if ([Array count] != 0) {
Array = nil;
}
Array = [[NSMutableArray alloc]init];
ARC를 사용하는 경우이 허용되어 같은 코드를 사용하고 있습니다? 이것은 어떤 종류의 충돌을 유발합니까? 내가이 일을하는 이유는 내 메소드가 호출 될 때마다이다. Array
은 새로운 데이터 세트를 얻는다. 내 수업의 여러 곳에서 이런 종류의 스 니펫을 사용하고 있습니다.
if ([Array count] != 0) {
Array = nil;
}
Array = [[NSMutableArray alloc]init];
ARC를 사용하는 경우이 허용되어 같은 코드를 사용하고 있습니다? 이것은 어떤 종류의 충돌을 유발합니까? 내가이 일을하는 이유는 내 메소드가 호출 될 때마다이다. Array
은 새로운 데이터 세트를 얻는다. 내 수업의 여러 곳에서 이런 종류의 스 니펫을 사용하고 있습니다.
ARC를 제외하고, 작동은 무의미합니다. 당신은 nil
에 ivar를 지정하고 즉시 다른 것에 할당합니다. 이것은 다른 것을 할당하는 것과 다르지 않습니다.
ARC 이전에는 변수에 이전 값이있는 경우 메모리 누출이있었습니다 (nil
에 대한 지정 또는 지정이 없음). ARC에는 누수가 없습니다.
최상의 해결책 : 직접 테스트하고 직접 확인하십시오! 이것은 아주 간단한 예입니다!
네, 물론 작동합니다! ARC는 자동 참조 횟수를 의미합니다. 단지 release
, retain
등등에 신경 쓸 필요가 없다고 말합니다.
개체를 없애려면 간단한 포인터 할당을 사용하면됩니다.
그리고 코드에 대해서는 다시 할당하기 전에 Array를 nil로 설정하십시오! 내 배열 객체
Then Array point to a new nil object
이있는 경우
그러나 모든 경우에 당신이 할 :
봅니다 코드의 논리를 얻을 수
내 배열 점에 새로운 NSMutableArray 객체
조건이 true로 평가 되든 그렇지 않든간에 변수는 바로 다음에 다른 값을 취하므로 쓸모가 없습니다!
이것은 내 대답보다 훨씬 더 밝은 :) – jrturton
귀하가 보여 주신 샘플 코드가 유효합니다. 다음은 몇 가지 변형은 :
if ([Array count] != 0) {
Array = [[NSMutableArray alloc] init];
}
예 2
if ([Array count] != 0) {
Array = [NSMutableArray array]; //value will be retained
}
예 3
if ([Array count] != 0) {
self.Array = [[NSMutableArray alloc] init]; //Will NOT leak under ARC.
}
예 4
//if ([Array count] != 0) {
[Array removeAllObjects];
//}
네 예 ARC하에 유효 .
또 다른 사실 : 인스턴스 변수는 일반적으로 첫 번째 문자가 소문자이지만 CamelCase 메서드는 계속됩니다. 이를 수행하는 또 다른 방법은 변수 이름 앞에 밑줄을 붙이는 것입니다. @property
값과 일치하는 @synthesize
메서드가없는 경우이 작업이 수행됩니다.
귀하의 코딩 스타일에 대한 간단한 제안 (그리고 단정 짓기에 대한 미안함). 변수 이름은 소문자로 시작하고 클래스 이름은 대문자로 시작한다는 ObjC 개발자 커뮤니티의 동의가있는 것 같습니다. 변수 이름에 대문자의 첫번째 문자를 사용하면 다른 개발자가 코드를 읽는 것이 더 어려워집니다. –
배열을 새 NSMutableArray에 할당하기 전에 배열을 nil로 설정할 필요조차 없습니다. 변수가 지정되면 이전 값은 새 값을 얻기 전에 해제됩니다. –