1. 程式人生 > >iOS開發- 關於Block的幾種應用

iOS開發- 關於Block的幾種應用

關於Block,博主不才,簡單分為三種來用:

  • 像函式一樣定義和使用,,不同於函式的是可以定義在方法內也可以定義在方法外
  • 定義成property的屬性來使用
  • 用作修飾詞

接下來一樣樣的來展示;
1.像函式一樣定義和使用,,不同於函式的是可以定義在方法內也可以定義在方法外

1)在方法中使用

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
      NSString *(^thisBlock) (NSString
*thisName) = ^(NSString *name){ return [NSString stringWithFormat:@"%@:%@",@"name",name]; }; NSLog(@"%@",thisBlock(@"xiaoming")); }

2)在方法外使用,就像定義一個方法一樣

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    BlockVoid(24
); } void (^BlockVoid) (int age) = ^(int xiaomingAge){ NSLog(@"xiaomingAge:%d",xiaomingAge); };

總結: 上面倆block也是block的一種寫法不過這麼用的貌似不多見,大多時候這麼寫反而顯得麻煩了(從這裡可以看出,block可以定義在方法內部也可以定義在方法外部,在外部的時候看著是不是更像函數了)

2.定義成property的屬性來使用
這是一種我們經常用的方法,舉個例子

/**
 常規無返回值有引數block,比較常用
 */
@property(nonatomic,copy)void
(^myBlock) (NSString *name,int age); /** 常規有返回值有引數block,使用起來其實和上面那個差別不大 */ @property(nonatomic,copy)NSString *(^haveReturnBlock) (NSString *name); //用法 - (void)test2 { _myBlock(@"CodeLiu",24); } - (NSString *)test3 { return _haveReturnBlock(@"小花"); }

除了這個用法,還有一種很好玩的用法,看著比較生動,其實是一樣的:

#import <Foundation/Foundation.h>

/**
 定義一個block

 @param returnContent 返回值
 */
typedef void(^RetureContentBlock)(id returnContent);

@interface LHBlockForUse : NSObject

/**
 用定義的block來宣告一個變數
 */
@property(nonatomic,copy)RetureContentBlock returnBlock;

@end

//用法
- (void)test1
{
    _returnBlock(@"You can put every type in here");
}

3.用作修飾詞

在Block內是不能修改Block外的變數的,如果要修改就需要用__block進行修飾

__block int lastAge = 24;
    void (^lastAgeBlock) (int age) = ^(int addAge){
        lastAge = lastAge + addAge;
        NSLog(@"xiaomingLastAge:%d",lastAge);
    };
lastAgeBlock(1);

以上是Block的簡單應用,如果哪裡寫的不好歡迎指正,下載地址:Block 的簡單使用