object-c - NSStackBlock의 메모리에 관한 질문입니다.
伊谢尔伦
伊谢尔伦 2017-05-02 09:19:15
0
1
572

블록에 관해 자주 묻는 질문입니다

으아아아

ARC가 없으면 블록은 exampleB_addBlockToArray(...)의 스택에 할당된 NSStackBlock입니다. exampleB()에서 실행될 때 해당 스택이 지워졌기 때문에 블록은 더 이상 유효하지 않습니다.

설명은 원리만 설명합니다. 이해는 되지만 잘 모르겠죠?
NSStackBlock은 힙의 로컬 객체 변수와 달리 스택 "객체"와 유사합니다. 반환 후에는 가리키는 콘텐츠가 해제되지 않습니다. 그럼 함수가 끝난 후에도 배열에 저장된 객체(점)는 여전히 존재하지만, 가리키는 메모리(내용)는 해제된다는 건가요?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

모든 응답(1)
滿天的星座

ARC가 아닌 상황에 대해서는 잘 모르겠지만, 저도 님과 같은 생각이라 답변해 보세요~

설명에 따르면 ARC가 아닌 블록은 힙이 아닌 스택에 배치되는데 이는 기본 유형과 동일합니다. exampleB_addBlockToArray의 블록 정의는 int b = 1;입니다. 배열에 저장되는 것은 &b과 같은 주소인 b에 대한 포인터입니다. 0x1234567……

그러나 b는

이 함수의 지역 변수입니다. 따라서 이 함수가 끝나면 사용된 메모리가 "해제됩니다". 실제로는 "데이터가 삭제되었으며 이 메모리를 사용할 수 있습니다"라고 표시됩니다. exampleB_addBlockToArray

실행되면 배열에 저장된

포인터는 여전히 존재하지만 포인터가 가리키는 메모리는 더 이상 이 포인터의 제어를 받지 않습니다. 다른 데이터가 이미 기록되어 있을 수도 있고, 방금 전까지의 데이터가 아직 남아 있을 수도 있습니다. 0x1234567……

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿