Objective-c의 Block
2155 단어 Objective-C
블락의 문법은 더 이상 군말하지 않고 다른 것들을 알아보자.
1. 블록의 저장 영역
Block은 실제적으로 OC 대상이다. 그의 저장 영역에 따라 Block을 세 가지 상황으로 나눌 수 있다. 하나는 데이터 영역이 존재하는 것이고, 하나는 쌓여 있는 것이고, 하나는 창고에 존재하는 것이다.창고에 있는 Block 대상은 역할 영역이 끝난 후에 바로 방출됩니다. 이 Block 대상을 저장하려면copy 방법을 사용해야 합니다.데이터 영역의 Block에서 자주 사용되지 않는 것을 발견하고 다시 소개하지 않습니다.일부 경우, 우리가 표시하지 않고 코피 방법을 호출하면, Block은 자동으로 Block을 더미에 복사합니다. 예를 들어:
Block을 반환값으로 되돌려줍니다.
Block을 에 복사strong 코스메틱의 id 유형 변수 또는 블록 유형 변수입니다.
코코아 프레임워크의 방법에서 함수 서명은 usingBlock의
GCD
2. Block 포획 대상
코드 보기
- (blk_t)createBlock
{
blk_t blk;
NSMutableArray *array = [[NSMutableArray alloc]init];
blk = ^(id obj){
[array addObject:obj];
NSLog(@"%d",array.count);
};
return blk;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
blk_t blk = [self createBlock];
blk(@"sd");
blk(@"sd");
blk(@"sd");
return YES;
}
실행 결과
2014-01-01 20:05:43.012 GCDDemo[7765:70b] 1
2014-01-01 20:05:43.012 GCDDemo[7765:70b] 2
2014-01-01 20:05:43.013 GCDDemo[7765:70b] 3
blk는 반환값으로 더미에 복사되었고 blk는array를 캡처했기 때문에array 작용역이 끝났음에도 불구하고array는 방출되지 않았습니다. 우리는 이 변수를 사용할 수 있습니다.
3. Block의 순환 인용
@interface Test: NSObject
{
blk_t blk;
}
...
blk = ^(id obj){
NSLog(@"%@",self);
};
이렇게 하면 순환 인용을 일으키는데 해결 방안은
제1종
id __weak tmp = self;
blk = ^(id obj){
NSLog(@"%@",tmp);
};
두 번째
__block id tmp = self;
blk = ^(id obj){
NSLog(@"%@",tmp);
tmp = nil;
};
단점은 이 Block을 실행해야 한다는 것입니다. 그렇지 않으면 순환 인용을 일으킬 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PreferenceBundle에서 오른쪽 상단에 Respring 버튼을 클릭합니다.만나서 반갑습니다, Minazuki라고합니다. 프로필 이름 : Minazuki_dev Twitter : Repo : 아직 중학생이므로 말이 이상한 곳이 있습니다만 용서해 주세요… 🙏 theos (Mac이든 단품이든 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.