2013-02-04 1 views
2

최근 페이스 북의 앱 전환으로 블록을 사용하면서 문제가 발생했습니다. Facebook 로그인 후 블록을 호출해야했습니다.보유하지 않고 블록을 복사해야하는 이유는 무엇입니까?

처음으로 앱이 다시 전환되면 내 블록이 파괴되어 스택에 남아 있기 때문에이를 유지하기로 결정했습니다. 그러나 그것은 작동하지 않았고, 나는 그 문제를 망쳤습니다 : /. that bloghere에 대한 해결책을 찾았습니다.

제 질문은 간단합니다 : 복사가 작동하고 유지가이 아닌 이유는 무엇입니까?

답변

4

Block_copy으로 블록을 복사 할 때까지 힙에 존재하지 않으므로 블록을 만들 때 유지할 것이 없기 때문에 블록을 유지할 필요가 없습니다. 이것은 블록에 관한 WWDC 강의에서 다룹니다.

상세 정보 : http://www.friday.com/bbum/2009/08/29/blocks-tips-tricks/

+0

덕분에 일이 어떻게 작동하는지 더 잘 이해할 수있었습니다. – Jeremy

+0

"그러나 iOS 6의 경우 일반 객체로 취급됩니다."이들은 항상 일반 객체로 취급되었습니다. – newacct

+0

@newacct 그들이 의미하는 바는 힙 할당 객체라는 것입니다. iOS 5에서는 stack_copy를 통해 힙에 복사해야하는 스택 객체였습니다. (더 이상 필요하지 않습니다) – borrrden

4

다른 비슷한 질문에 my recent answer를 참조하십시오 : 기본 블록으로

는 스택에 만들어집니다. 그들은 그들이 생성 된 범위에만 존재한다는 것을 의미합니다.
[...]
스택 대 힙에 대한 자세한 정보는 Stack and Heap Objects in Objective-C을 Mike Ash가 읽으십시오.

+0

답변을 주셔서 감사합니다. 귀하의 링크가 유용했습니다! – Jeremy

관련 문제