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;
총결산이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Linux 프로 세 스 대기 열프로 세 스 는 다음 절 차 를 통 해 대기 열 에 자신 을 추가 합 니 다: 1) DECLARE 호출WAITQUEUE () 대기 열 항목 만 들 기;2) add 호출wait_queue () 대기 열 에 자신 을 추...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.