Blocks 학습
7724 단어 block
ios에서 Blocks는 대상입니다. 이 코드는 언제든지 실행할 수 있도록 봉인되어 있습니다.Blocks는 함수 매개 변수나 함수의 반환값으로 사용할 수 있으며, 그 자체는 입력 매개 변수나 반환값을 가져올 수 있다.이것은 전통적인 함수 바늘과 유사하지만, 차이가 있다. Blocks는 inline이고, 국부 변수는 읽기만 한다.
Blocks의 정의:
int (^Multiply)(int, int) = ^(int num1, int num2) {return num1 * num2;};
Multiply의 Blocks 대상을 정의했습니다. 이것은 두 개의 int 인자를 가지고 있으며 int를 되돌려줍니다.등식 오른쪽은 바로 Blocks의 구체적인 실현이다. Blocks체에 주의한다.
블록스는 로컬 변수에 액세스할 수 있지만 수정할 수는 없습니다.
int multiplier = 7;
int (^myBlock)(int) = ^(int num) {
multiplier ++;//
return num * multiplier;
};
수정할 경우 키워드 추가:block
__block int multiplier = 7;
int (^myBlock)(int) = ^(int num) {
multiplier ++;//
return num * multiplier;
};
함수의 매개 변수로서 Blocks는 어떤 의미에서 리셋 함수나delegate를 대체했다.함수가 호출되면 이벤트가 터치된다고 가정하면 Blocks의 내용이 실행됩니다.이렇게 하면 코드의 통합과 읽기에 유리하므로, 너는 여기저기 의뢰 방법을 실현할 필요가 없다.
시스템 API에는 이미 Blocks 매개 변수가 많이 지원됩니다.
예를 들면 다음과 같습니다.
[UIView animateWithDuration:(NSTimeInterval)duration animations:(void (^)())animations]
집합체에서도 Blocks를 활용할 수 있다.하나의 그룹을 열거할 때 우리는 보통 다음과 같다.
for (id obj in Array);
지금,
NSString *area = @"Europe";
NSArray *timeZoneNames = [NSTimeZone knownTimeZoneNames];
NSMutableArray *areaArray = [NSMutableArray arrayWithCapacity:1];
NSIndexSet *areaIndexes = [timeZoneNames indexesOfObjectsWithOptions:NSEnumerationConcurrent
passingTest:^(id obj, NSUInteger idx, BOOL *stop) {
NSString *tmpStr = (NSString *)obj;
return [tmpStr hasPrefix:area];}];
NSArray *tmpArray = [timeZoneNames objectsAtIndexes:areaIndexes];
[tmpArray enumerateObjectsWithOptions:NSEnumerationConcurrent|NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[areaArray addObject:[obj substringFromIndex:[area length]+1]]; }];
NSLog(@"Cities in %@ time zone:%@", area, areaArray);
Blocks에서obj는 그룹의 모든 구성원입니다. 우리는 Blocks에서 모든 대상을 처리할 수 있습니다.예를 들면 다음과 같습니다.
NSMutableArray *mArray = [NSMutableArray arrayWithObjects:@"a",@"b",@"abc",nil];
NSMutableArray *mArrayCount = [NSMutableArray arrayWithCapacity:1];
[mArray enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock: ^(id obj,NSUInteger idx, BOOL *stop){
[mArrayCount addObject:[NSNumber numberWithInt:[obj length]]];}];
NSLog(@"%@",mArrayCount);
너는 이렇게 코드를 쓰면 더욱 쉽게 이해할 수 있다는 것을 알게 될 것이다.
마지막으로 정렬의 예를 보십시오.
NSArray *stringsArray = [NSArray arrayWithObjects:
@"string 1",
@"String 21",
@"string 12",
@"String 11",
@"String 02", nil];
static NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSNumericSearch |
NSWidthInsensitiveSearch | NSForcedOrderingSearch;
NSLocale *currentLocale = [NSLocale currentLocale];
NSComparator finderSort = ^(id string1, id string2) {
NSRange string1Range = NSMakeRange(0, [string1 length]);
return [string1 compare:string2 options:comparisonOptions range:string1Range locale:currentLocale];
};
NSLog(@"finderSort: %@", [stringsArray sortedArrayUsingComparator:finderSort]);
결과:finderSort:(
"string 1",
"String 02",
"String 11",
"string 12",
"String 21"
)
원문
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
3. CSS 기본 프로퍼티프로퍼티 프로퍼티 값으로 테두리 두께 지정 가능 width/height 프로퍼티 max-width/max-height 프로퍼티 margin/padding 프로퍼티 margin 또는 padding 프로퍼티에 윗쪽, 오...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.