iOS 개발 기술 의 Weak Self 매크로 진화 에 대한 상세 한 설명

머리말
본 고 는 주로 iOS 의 Weak Self 宏 의 진화 에 관 한 내용 을 소개 하고 참고 학습 을 제공 합 니 다.다음은 더 이상 할 말 이 없 으 니 상세 한 소 개 를 해 보 겠 습 니 다.
Weak Self 매크로 의 진화
블록 과 같은 순환 인용 을 방지 할 때 를 사용 한 다 는 것 을 잘 알 고 있 습 니 다.weak 키 워드 는 다음 과 같이 정의 합 니 다.

__weak typeof(self) weakSelf = self;
나중에 편 의 를 위해 매번 이런 고정 코드 를 쓰 지 않 아 도 된다.우 리 는 매크로 를 정의 했다.

#define WeakSelf __weak typeof(self) weakSelf = self;
그 후에 우 리 는 비교적 편리 하 게 필요 한 곳 에서

WeakSelf;
...
[weakSelf doSomething];
그 후에 우 리 는 self 뿐만 아니 라 weak 을 사용 해 야 한 다 는 것 을 알 게 되 었 습 니 다.일부 변수 도 weak 가 필요 할 수 있 습 니 다.그래서 우리 의 매크로 는 계속 진화 되 었 습 니 다.self 만 지원 하 는 것 이 아 닙 니 다.

#define WeakObj(o) __weak typeof(o) o##Weak = o;
이렇게 하면 나중에 weak 을 사용 해 야 하 는 대상 에 대해 한 마디 만 쓰 면 obbyWeak 변 수 를 사용 할 수 있 습 니 다.(PS:없 음 을 발 견 했 습 니 다.여기 서 생 성 된 변수 이름 은 obbyWeak 입 니 다.weak Obj 가 아 닙 니 다.이 유 는 글 끝의 주석 1 참조)
그 다음 에 우 리 는 작은 기 교 를 발 견 했 습 니 다.우리 의 이 매크로 를 더욱 원생 으로 보이 게 할 수 있 습 니 다.우 리 는@기 호 를 앞 에 추 가 했 습 니 다.

#define WeakObj(o) autoreleasepool{} __weak typeof(o) o##Weak = o;
사용 상 으로 는 이렇게 보 여요.

@WeakObj(self);
...
[selfWeak doSomething];
엄 청 큰 것 같 지 않 아 요?
여 기 는WeakObj(obj) 이 시스템 의 키 워드 를 이용 하여 이 루어 진 것 이다.사실은@autoreleasepool{}이것 도 똑 같은 효 과 를 얻 을 수 있다.예 를 들 어:

#define WeakObj(o) try{}@finally{} __weak typeof(o) o##Weak = o;
이 부분 이 비어 있 는@try 또는 비어 있 는@autoreleasepool 은 컴 파일 할 때 최적화 되 어 성능 문 제 를 걱정 하지 않 아 도 됩 니 다.
이로써 우리 의 매크로 는 이미 사용 할 수 있 게 되 었 습 니 다.그러나 실제 사용 에서 매우 난처 한 문제 가 발생 했 습 니 다.바로 코드 가 자동 으로 완성 되 는 것 입 니 다.@W 는 이 매크로 를 자동 으로 제시 하지 못 하기 때문에 매번 어색 하 게 힌트 를 이용 하여 4.567914 를 쓴 다음 에 커서 가 앞쪽 으로 이동 하여@기 호 를 칩 니 다.
이런 일 을 어떻게 참 을 수 있 습 니까?
다행히 우 리 는 이기 가 있 습 니 다.Xcode 의 CodeSnippet,임의의 방법 으로 코드 를 한 마디 씁 니 다.

@WeakObj(<#obj#>);
Xcode 의 CodeSnippet 영역 으로 드래그 하고 단축 키 를@WeakObj 로 설정 하면 됩 니 다.

이로써@W 를 즐겁게 사용 하면 이 매크로 를 자동 으로 완성 할 수 있 습 니 다.
그리고 그 에 상응하는 strong 宏 도 있 습 니 다.함께 햇볕 에 쬐 세 요.

#define StrongObj(o) autoreleasepool{} __strong typeof(o) o = o##Weak;
쓸모 가 있 잖 아.간단하게 예 를 들 어 봐.

@WeakObj(self);
[var setBlock:^{
 @StrongObj(self);
 [self doSomething];
}];
이렇게 쓴 원인 에 대해 먼저 스스로 추측 한 후에 효 월 의 이 글 을 볼 수 있 습 니 다https://www.jb51.net/article/140126.htm댓 글 에 도 메 시 지 를 남 길 수 있 습 니 다.
마지막 으로 이 매크로 가 생 성 한 변수 이름 이 obbbbWeak 인 이 유 를 알 수 있 습 니 다.
1.사용 할 때 개발 자가 습관 적 으로[self doSomething]을 칠 때 self 를 입력 할 때 자동 으로 보 완 된 부분 을 볼 수 있 고 self Weak 를 선택 할 수 있 으 며 알림 방식 이 라 고 할 수 있 습 니 다.
2.weak 가 선행 되 어 있 으 면 물론 가능 합 니 다.weakobj 와 같은 변수 이름 을 만 들 것 입 니 다.매크로 o\#\#Weak 을 weak\#\#o 로 바 꾸 기만 하면 됩 니 다.
자,이 글 은 일부 사람들 에 게 약간의 깨 우 침 이나 도움 이 되 기 를 바 랍 니 다.
마지막 으로 개인 이 사용 하 는 매크로 정 의 를 내 립 니 다.

#define YRWeakObj(o) autoreleasepool{} __weak typeof(o) o##Weak = o;
#define YRStrongObj(o) autoreleasepool{} __strong typeof(o) o = o##Weak;
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기