7

GitHub의 REActivityViewController 프로젝트에서 홀수 라인의 코드를 발견하여 이해할 수 없습니다. 값이 선언 된 것과 동일한 클래스로 캐스팅되는 것을 피하는 것처럼 보이지만, 왜 필요한지는 알 수 없습니다. 나는 상속을 위해 여하튼 중요하다는 것을 생각해 본다.__typeof를 사용한 약한 자기 할당에 대한 설명

누구에게이 작업이 수행 될지 설명 할 수 있습니까?

__typeof(&*self) __weak weakSelf = self; 

https://github.com/romaonthego/REActivityViewController/blob/master/REActivityViewController/REPocketActivity.m

나는 이런 식으로 선언하여이 좀 더 명확하게 것

...

id __weak weakSelf = self; 

를 그리고 블록 내에서 나는 강한 참조로 재 선언 할 수 있습니다.

REPocketActivity* __strong strongSelf = (REPocketActivity*)weakSelf; 

그런 다음 블록 내에 strongSelf을 사용합니다. 범위를 벗어나면 안전하게 안전한 참조가 삭제됩니다.

답변

4

__typeof(self)은 특정 클래스에 바인딩되어 있지 않으므로 이식성이 뛰어납니다. 그럼에도 불구하고 &* 트릭은 분명 중복됩니다. 아는 한 내 지식은 C이고 결과적으로 Objective-C 인 경우 &*ptr은 완전히 ptr과 같습니다.

그러나 연산자가 오버로드되어 의미가 직관적이지 않을 수 있으므로 C++과 같은 다른 C 유사 언어에서는이 내용이 유효하지 않을 수 있습니다. 사실, 특히 C++ 응용 프로그램에 이미 &*이있는 것을 보았습니다. 특히 이터레이터를 다룰 때는 더욱 그렇습니다. 내 생각 엔 저자가 C++ 배경을 가지고 있기 때문에 그는 그 중복 구조를 삽입 한 것입니다.

어쨌든, 내가 틀렸을 수도 있고, 더 정교한 설명을 듣고 싶습니다.

+0

Gabriele, 그건 합리적인 설명처럼 보입니다. 나는 약간의 문맥을 얻기 위해 이와 같은 구글 구문을 쓸 수 있으면 좋겠다. – Brennan

0

Objective-C 방법의 self 유형은 항상 포인터 유형이므로 Objective-C++에서도 __typeof (& * self)는 중복됩니다. __typeof (self)는 항상 작동해야합니다.

+0

또 다른 옵션은 현재 Objective-C 최신 버전에서 지원되는 auto 키워드를 사용하는 것입니다. 'auto __weak weakSelf = self;' –

관련 문제