iOS에서 Block의 기본 사용 방법
이 장에서는 Block에 대해 많은 구현 연구를 하지 않습니다.기본적인 용법만 설명할 뿐이다.순수한 기초 지식.실제 프로젝트와 결합하여 어떻게 예를 들겠는가.블락은 장면을 사용하여 두 인터페이스에서 값을 전달할 수도 있고 코드에 대한 봉인을 매개 변수로 전달할 수도 있다.GCD를 사용하면 블락의 묘미를 알 수 있다.
Block 소개
블록은 비교적 특수한 데이터 형식이다.그것은 코드를 저장해서 적당한 때에 호출할 수 있다.
블락의 수식.
ARC의 경우 1.만약 코피로 블록을 수식한다면, 이 블록은 퇴적 공간에 저장될 것이다.블락의 내부 객체에 대한 강력한 참조로 인해 반복 참조가 발생합니다.메모리를 풀 수 없습니다.해결 방법: 새 포인터 ( weak typeof (Target) weakTarget = Target) 가 블록 코드 블록의 대상을 가리키고 weakTarget로 조작합니다.순환 인용 문제를 해결할 수 있다.
2. weak으로 블록을 수식하면 해당 블록은 창고 공간에 저장됩니다.순환 인용 문제가 발생하지 않습니다.
MRC의 경우 copy로 수식한 후 블록 내부에서 대상을 사용하려면 ( block typeof (Target) BlockTarget = Target) 처리를 해야 한다.Block에서 BlockTarget로 작동합니다.
Block의 정의 형식
반환값 형식 (^block 변수 이름) (형삼 목록) = ^(형삼 목록) {};Block에 저장된 코드 Block 변수 이름 호출하기(실참);
기본적으로 Block 내부는 외부의 부분 변수를 수정할 수 없습니다. Block 내부는 수정할 수 있습니다block 수식의 국부 변수
블락 모드
1. 매개 변수가 없고 반환 값이 없는 블락 2.매개변수가 있고 반환 값이 없는 Block 3.매개변수가 있고 반환 값이 있는 블록
Block 간단한 사용 예
매개 변수 없음 반환 값 없음 블록
/**
* Block
*/
-(void)func1{
/**
* void :
* emptyBlock: block
* (): 。 ,
*/
void (^emptyBlock)() = ^(){
NSLog(@" , Block");
};
emptyBlock();
}
반환 값이 없는 매개변수가 있는 블록
/**
* block
*
* @param int A
* @param int B
*
* @return
*/
void (^sumBlock)(int ,int ) = ^(int a,int b){
NSLog(@"%d + %d = %d",a,b,a+b);
};
/**
* sumBlock Block, 20
*/
sumBlock(10,10);
매개변수가 있고 반환 값이 있는 블록
/**
*
*
* @param NSString 1
* @param NSString 2
*
* @return 3
*/
NSString* (^logBlock)(NSString *,NSString *) = ^(NSString * str1,NSString *str2){
return [NSString stringWithFormat:@"%@%@",str1,str2];
};
// logBlock, Block
NSLog(@"%@", logBlock(@" ",@"Block"));
Block 결합 typedef 사용
스스로 블록의 유형을 정의하고 정의된 유형으로 블록을 만들면 더욱 간단하고 편리하다.여기에는 Block 콜백을 예로 들어 화면의 배경색을 수정합니다.ViewController1 디렉터 1, ViewController2 디렉터 2 디렉터 1에서 디렉터 2로 이동한 다음 디렉터 2에서 이벤트를 트리거하여 디렉터 1의 배경색을 빨간색으로 바꿉니다.
ViewController2의 구현
#import
@interface ViewController2 : UIViewController
/**
* changeColor Block。 changeColor , id
*
* @param id
*/
typedef void(^changeColor)(id);
/**
* changeColor Block, Block 。
*/
@property (nonatomic, copy) changeColor backgroundColor;
@end
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//
UIColor *color = [UIColor redColor];
// Block
self.backgroundColor(color);
}
ViewController1의 실현
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
ViewController2 *vc =[[ViewController2 alloc]init];
//
vc.backgroundColor = ^(UIColor *color){
self.view.backgroundColor = color;
};
[self.navigationController pushViewController:vc animated:YES];
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.