[iOS7의 일부 요약] 14, 블락의 개념과 응용
2747 단어 Objective-Cblockios7
1. 소개
Block은 ios 4.0 이후에 추가되어 새로운 ios api에 대량으로 사용됩니다.Block은 익명의 코드 블록으로 다른 대상에게 전달되는 매개 변수로 되돌아오는 값을 얻을 수 있습니다.본질적으로 볼 때 Block은 다른 일반적인 변수와 유사하지만 저장된 데이터는 함수체일 뿐이다.블록은 Objective-C에 대한 특허가 아니라 C, C++, OBjective-C에 적용될 수 있는 언어 차원의 새로운 기능이다.Block을 사용하면 개발자는 코드 세그먼트를 하나의 수치처럼 매개 변수로 함수에 전달할 수 있습니다.또한 Blocks는 Objective-C의 한 대상이기도 하며, NSArray나 NSDictionary 등의 집합에 다른 대상처럼 추가할 수 있다.
2. 사용 방법
(1) Block을 선언합니다.
// Block
int (^myBlocks)(int);
(2) Block을 만듭니다.
myBlocks = ^(int a)
{
int result = a * a;
return result;
}
(3) Block 호출:
int ret = myBlocks(10);
C/C++에 익숙한 TX는 ios의 Block 메커니즘이 전자의 함수 포인터라는 개념과 매우 유사하다는 느낌을 받을 수 있다.
(4) 성명 블록의 유형: typedef를 이용하여 블록의 정의와 실현을 간소화하고 특히 같은 형식에 여러 블록을 정의할 때 더욱 뚜렷하다.
typedef int (^myBlocks) (int);
MyBlocks myBlock = ^(int a)
{
int result = a*a;
return result;
}
3. Block을 함수로 하는 매개 변수:
Block을 함수의 매개 변수로 전달함으로써 리셋 함수와 유사한 기능을 실현할 수 있다.
.....
4. 블록의 변수
블록에서 전역 변수와 국부 변수를 사용할 수 있어 양자에 대한 처리가 다르다.block에서 국부 변수를 인용할 때 이 변수를 코드 블록에 상수로 인코딩합니다.Block에서 수정하려면 을 사용해야 합니다Block 수식.예:
//========== ==========
int number = 10;
myBlock = ^(int a)
{
number = 20;//number , 。
NSLog("%@",number);
}
//========== ==========
__block int number = 10;
myBlock = ^(int a)
{
number = 20;//__block block
NSLog("%@",number);
}
5. 블록의 메모리 관리
Block 내부에서 인용된 대상에 대해Block도 관건이다.Block 내부에서 일부 대상을 인용하면 그 대상의 인용 계수는 +1입니다.除非该对象由__Block 수식, 인용 계수는 변하지 않습니다.이렇게 하는 주요 원인은 Block의 코드가 실행 지연과 자주 관련되기 때문에 ios는 Block 내부에 관련된 대상을retain으로 진행하여 Block의 코드가 실행되기 전에 그 대상이 방출되는 것을 방지한다.
Block에 대한 메모리 관리는 보통copy와release 방법을 사용할 수 있습니다.창설 초기에 Block의 메모리는 창고에 분배되고, 코피는 더미로 이동합니다.
Block을 실현할 때self에 대한 강한 순환 인용을 피합니다. 간단하게 말하면 하나의 클래스가 Block을property로 포함한다면 이 Block의copy 속성은self가 Block에 대한 강한 인용이라고 볼 수 있고, 하나의 Block이 내부에 호출된 변수는 대상과 마찬가지로 강한 인용 관계가 존재한다고 볼 수 있습니다.그러면 Block이 실행될 때 self 방법을 사용하면 self와 Block의 강력한 순환 인용을 초래하여 메모리를 방출할 수 없습니다.이러한 상황을 피하기 위해 Block 내부에서self를 호출할 때weak 수식된self 던전, 그리고 이 던전으로self를 호출하는 방법은 다음과 같다.
- (void)configureBlock {
XYZBlockKeeper * __weak weakSelf = self;
self.block = ^{
[weakSelf doSomething]; // capture the weak reference
}
}
상기 Block의 주요 역할을 제외하고 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에 따라 라이센스가 부여됩니다.