나는 learnig objective-c 및 iPad 앱 프로그래밍 과정을 진행 중입니다. 내가 계속해서 스스로를 트립하고 다시 읽어야하는 한 가지는 메모리 관리입니다. 나는 거기에 도착하고있다. .. 천천히. 모든 기본 규칙은 alloc
/retain
과 같이 release
이어야합니다. 그러나 한 상대적으로 기본적인 것은 저를 회피한다 누군가가 설명 할 수 있는지 궁금 ... ios에서의 메모리 관리 이해
NSArray *myArray = [[NSArray alloc] init];
myArray = [someNSSet allObjects];
이 비교적 똑바로 앞으로 코딩되어 ... 다음 코드를 가지고와 [myArray release]
문을 필요로한다.
NSArray *myArray = (NSArray *)[someNSSet allObjects];
까지 내가 이해를 사용할 때 어떻게 당신이 그나마 (NSString *)
필요 ...
는 그러나, 나는의 예를보고 유지 (실제로, 나는 광범위 다음 '바로 가기'를 사용했다 [myArray release]
문을 사용하여,하지만 난 이유를 이해 해달라고합니다.
수 누군가가 설명 할 수 있을까?이 코드는를 유출
반환 값을 소유하고 있지 않는 이유는 무엇입니까? 누구/무슨 일이야? –
@BenThompson : 객체 (new 또는 alloc, copy 또는 mutableCopy)를 만들 때 보유 개수가 1이고 소유하고있는 객체입니다. 개체를 보낼 때 메시지를 보관할 때 보유 수는 1 씩 증가하며 사용자가 소유하고 있습니다. 자신이 소유 한 객체 만 릴리스하면됩니다. –
@Ben : 자동 회수 풀이'allObjects'에서 반환 된 객체의 소유자 일 가능성이 큽니다. 다른 가능성은 set 객체입니다 만, 이것은 새로운 배열을 생성하기보다는 세트가 이미 소유 한 객체를 노출 한 경우에만 실제로 발생합니다. 그러나 배경에서 무슨 일이 벌어지고 있는지에 대한 이해를 제외하고, 당신은 자신의 물건을 소유하고있는 자신을 염려해서는 안됩니다. 당신이하든 안하든, 당신이 고려해야 할 전부입니다. –