iOS 개발 - 대상 간 통신의 Block
별칭: 코드 세그먼트, 블록, 클립은 애플이 OC 언어에 추가한 것이다.
역할: 프로그램이 실행되는 과정에서 코드를 저장하고 이 코드를 전달할 수 있습니다.
적용: 객체 간의 통신에 사용됩니다.
2. Block의 문법:
함수 바늘의 문법과 비슷해서 Block의 반환값과 매개 변수의 개수와 유형을 설정합니다.
(1) 정의:
반환 값이 없는 Block 변수: void (^my Block) (void)
매개 변수가 있고 되돌아오는 값이 있는 Block 변수 int(^sum Block)(int, int);
(2) 할당:
myBlock = ^{
//block
};
sumBlock = ^(int a, int b) {
return a + b;
};
(3) 호출:
myBlock();
sumBlock(3,4); 。
typedef block : :
typedef void (^MyBlock)(void); // MyBlock
typedef int (^AthematicBlock)(int, int); // AthematicBlock
//
MyBlock block1;
AthematicBlock block2;
3. Block 내부에서 바깥의 변수를 방문한다.
기본적으로 Block 내부에서 외부 정의의 국부 변수를 수정할 수 없습니다.
로컬 변수에 더하기Block 키워드, 이 부분 변수는 Block 내부에서 수정할 수 있습니다.
4. Block은 대상간 통신을 실현한다. (보모가 아이를 목욕시킨다)
1.어디서 Block을 호출하고 어디서 Block을 전달할지 확인
사건이 어디에서 발생했는지, 바로 어디에서 Block을 리셋한다
이벤트가 어디에서 응답(아이를 목욕시키고), 어디에서 이루어지고 Block(아이를 목욕시키고) 전달(유연하게 처리)
2.Block 호출 클래스 차일드
Block 속성을 정의해야 합니다.copy의 메모리 관리 정책을 설정해야 합니다.
그리고 이벤트가 발생할 때 Block을 호출해야 합니다
3.Block을 전달하는 클래스 Nanny
Block 블록을 정의합니다. 이 Block의 코드는 이 이벤트에 대한 응답입니다.
이 Block을 호출하는 실례 대상에게 값을 부여합니다. (어린이)
예: 아이류에 Block 속성을 설정하고 아이가 더러워질 때 가정부에서 이루어진 아이를 씻는 Block 방법을 사용하고, 마지막으로main에서 가정부에게 아이를 씻는 방법을 실현한다.
child.h
@interface Child : NSObject
@property NSInteger cleanValue; //
@property NSInteger happyValue; //
//- (void)batheChild:(Child *)child;
// block ,
typedef void (^HandleBlock) (Child *);
// block ( HandleBlock , washBlock)
@property (copy, nonatomic) HandleBlock washBlock;
- (instancetype)initWithCleanValue:(NSInteger)cleanValue happyValue:(NSInteger)happyValue;
@end
child.m
#import "Child.h"
@implementation Child
- (instancetype)initWithCleanValue:(NSInteger)cleanValue happyValue:(NSInteger)happyValue {
self = [super init];
if (self) {
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
_cleanValue = cleanValue;
_happyValue = happyValue;
}
return self;
}
- (void)timerAction:(NSTimer *)timer {
_cleanValue--;
_happyValue--;
NSLog(@"clean:%li, happy:%li", _cleanValue, _happyValue);
// ,
if (_cleanValue == 95) {
// block, 。
// block
if (self.washBlock) {
self.washBlock(self);
}
}
}
@end
nanny.h
@class Child;
@interface Nanny : NSObject
- (void)washBaby:(Child *)child;
@end
nanny.m
#import "Nanny.h"
#import "Child.h"
@implementation Nanny
- (void)washBaby:(Child *)child {
child.washBlock = ^ (Child *child){
NSLog(@" , ");
child.cleanValue = 100;
};
}
@end
main
#import "Child.h"
#import "Nanny.h"
#import "Grandma.h"
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
Nanny *nanny = [[Nanny alloc] init];
Child *child = [[Child alloc] initWithCleanValue:100 happyValue:100];
[nanny washBaby:child];
[[NSRunLoop currentRunLoop] run];
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
원격 작업으로 팀워크와 작업 효율이 군과 상승한 이야기자신의 팀은 관리 팀과 실시 팀에서 각각 일하고 있는 오피스가 별개의 장소였기 때문에 처음부터 커뮤니케이션에 어딘가 벽이 있었습니다. 그런 가운데 시작된 원격 작업도 불안 밖에 없었지만, 리모트 워크를 시작하고 나서...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.