Block系列1 初識block

2021-09-07 17:20:13 字數 1733 閱讀 2727

//-------1、定義函式-----

//1、函式

int sum(int a,int b)

//------------------2、宣告---------

//2、宣告函式指標【將sum換成*p就能夠了】

int (*p)(int a,int b);

//(1)宣告block【將sum換成^myblock就能夠了】

int (^myblock)(int a,int b);

//舉一反三

void (^myblock2)(void);

- (void)viewdidload

;

//---------------------4、呼叫------------------

//4、呼叫

int result = p(3,6);

nslog(@"%d",result);

//(3)呼叫

int resultblock = myblock(3,6);

nslog(@"%d",resultblock);

myblock2 = ^(void)

;myblock2();

//---------------------二、檔案之間傳值------------------

//block的呼叫

person *person = [[person alloc]init];

//1-2實現block

// ^int(int a, int b)

//把person的10和20傳到本檔案裡

//區域性變數到block中是常量。如需改變值則須要在宣告前面加 __block

__block int number = 10;

int resultps = [person testmethod:^int(int a, int b) ];

//typedef 方式建立

int resultps2 = [person testmethod2:^int(int a, int b) ];

nslog(@"resultps:%d resultps2:%d",resultps,resultps2);

}@end

person.h

#import //這裡的personblock是型別名字,能夠理解為int

typedef int(^personblock) (int a,int b);

@inte***ce person : nsobject

//1-1在引數中宣告【int(^)(int a, int b】

- (int)testmethod:( int(^)(int a, int b) )block;

//這裡不須要加星號

- (int)testmethod2:(personblock)block;

@end

person.m

#import "person.h"

@implementation person

//1-3呼叫block

- (int)testmethod:( int(^)(int a, int b) )block

- (int)testmethod2:(personblock)block

@end

block系列重新整理1

main.m import import person.h int sum int a,int b int main int argc,const char argv int myblock1 int,int int a,int b 呼叫block result myblock 10,20 prin...

Block的使用 初探Block

看了兩天的block。網上是有非常多解說與教程,也有講得非常好的。這裡就主要解說下我的理解與收穫。歡迎拍磚。所謂block。我覺得應該是乙個閉包函式。而閉包,就是說block以及內部全部的變數生命週期都在其呼叫函式的生命週期內。它一被呼叫完畢,則會被立刻釋放。這裡不講執行機制,僅僅簡要地講基本的用法...

Block中 block實現原理

三.block中 block實現原理 我們繼續研究一下 block實現原理。1.普通非物件的變數 先來看看普通變數的情況。import int main int argc,const char ar myblock return 0 把上述 用clang轉換成原始碼。struct block byr...