iOS開発--Blockの使用


1:Blockは匿名関数で関数コールバック機能を実現できる
インタフェース間の通信に使用でき、同時に値を伝達することができる.
2:注意:Blockを定義するにはcopy修飾retainとassignを使用する必要があります.野ポインタの問題になります.
3:blockを使用しない場合は破棄する必要があります
-(void)dealloc{
    //  block
    Block_release(_passValueBlock);
    [super dealloc];
}

4:block実装部分ではインスタンス変数を直接使用することはできません.selfは属性を呼び出します.blockはself参照カウントに1を加算し、最終的にはループ参照の問題を引き起こすからです.
*転送(secondからfirstに転送)blockは、プロキシ転送定義FirstView(ルートビューコントローラ)およびScondView"SecondView.h"ファイルと同様の値を転送します.
#import <UIKit/UIKit.h>

typedef void(^PassValueBlock)(NSString *);

@interface SecondView : UIViewController

@property (nonatomic,retain)UITextField *textFild;

//1:               block    
@property (nonatomic,copy)PassValueBlock passValueBlock;
@end

 "SecondView.m"  
//          
-(void)viewDidDisappear:(BOOL)animated{
    [super viewDidDisappear:animated];
    //2 ;   block     
    self.passValueBlock(_textFild.text);
}

"FirstView.m"  
-(void)nextAction:(UIBarButtonItem *)Bt{
    SecondView *seconVC = [[SecondView alloc]init];
    [self.navigationController pushViewController:seconVC animated:YES];
    [seconVC release];
    //      block   
    __block FirstView *firstVC = self;
    seconVC.passValueBlock = ^ void (NSString *string){
        //            
        //  self  firstVC
        //  :   block                         
        //         __block     
        // ARC      __weak
        firstVC.textFild.text = string;
    };
}