2010-02-11 3 views
2

Im은 모든 것을 해제해야하는 메신저를 프로그래밍하는 데 익숙합니다.이 목적은 멍청한 물건으로 일부 스패너를 던지고 있습니다. 아래 코드를 사용하고 있습니다.NSArray * sort * 메서드를 사용한 후 반환 된 배열을 해제 할 책임이 있습니까

NSArray *b = [a allObjects]; 
NSArray *c = [b sortedArrayUsingDescriptors:sortDescriptors]; 

"b"와 "c"를 공개 할 책임은 누구에게 있습니다. 레코드의 경우 "a"는 NSSet입니다. 내가 수동으로 릴리스하면 앱이 고장난 것으로 보이지만 100 % 확실하지 않아서 ID가 물어볼 것이라고 생각합니다.

감사합니다.

답변

10

두 호출 모두 자동 반복 된 객체를 반환하므로 사용자는 안전합니다. 그들은 당신을 위해 할당 해제 될 것입니다 (언젠가는 예를 들어 현재 실행 루프가 끝날 때 언젠가는).

retain, alloc 또는 개체의 copy 메서드 중 하나를 명시 적으로 호출하지 않으면 호출하는 메서드에서 자동 다시 가져온 개체가 반환된다는 일반적인 규칙이 있습니다.

여기는 memory management documentation에 대한 링크입니다.

+2

좋은 답변입니다. 하나의 수정 :'alloc'과'init'가 보통 같이 발생하더라도,'alloc'은 소유하고있는 객체를 반환하는 실제 메소드이고, 나중에 release하거나 autorelease해야합니다. 자신이 소유 한 객체를 반환하는 세 번째 메소드 집합은'copy'를 포함하는 메소드입니다. @Ole에 +1 +1, –

+0

+1 해 주셔서 감사합니다. –