2014-08-29 2 views
0

언제 Obj-C 블록이 객체가됩니까? 변수에 할당되거나, 매개 변수로 전달되거나, 함수, 블록 또는 메서드에서 반환되거나 실행될 때 - 둘 중 먼저 발생하는 경우를 인스턴스화한다고 추측합니다. 그러나 나는이 시점에서 문서를 본 적이 없다.Obj-C 블록 인스턴스화

그리고이 질문에 대한 추신으로 스위프트에서 동일합니까?

+1

'''후행을 쓰면 블록이 객체가됩니다. – akashivskyy

답변

2

블록이 개체가되지 않습니다. 개체입니다. 블록 리터럴은 블록 ​​객체에 대한 포인터로 평가됩니다.

스위프트의 클로저는 개체가 아닙니다.

+0

제 질문에 대해 자세히 설명 드리겠습니다. 인스턴스화는 언제 발생합니까? 예, 블록 리터럴은 블록 ​​객체에 대한 포인터로 평가됩니다. 그렇다면 리터럴은 언제 평가됩니까? –

+0

메서드 본문에 리터럴로 작성된 블록을 반환하는 팩토리 메서드가 있다고 가정합니다. 메서드는 실행될 때마다 동일한 (==) 객체를 반환합니까? –

+1

@DavidCasseres :이 규격은 그것이 동일한 객체인지 아닌지에 대해 어떠한 보장도하지 않는다. 블록이 주변 스코프 (즉, 클로저)에서 로컬 변수를 캡처하면 캡처하는 변수의 값이 다른 메소드 실행 중에 다른 값을 가질 수 있기 때문에 동일한 객체가 될 수 없습니다. 블록이 지역 변수 (클로저가 아닌)를 포착하지 않으면 동일한 객체를 반환하도록 할 수 있으며 현재 구현에서는 비 클로저 블록을 정적으로 할당합니다. 프로그램 기간 동안 하나의 객체가 존재합니다 – newacct