iOS開発--Blockの使用
1:Blockは匿名関数で関数コールバック機能を実現できる
インタフェース間の通信に使用でき、同時に値を伝達することができる.
2:注意:Blockを定義するにはcopy修飾retainとassignを使用する必要があります.野ポインタの問題になります.
3:blockを使用しない場合は破棄する必要があります
4:block実装部分ではインスタンス変数を直接使用することはできません.selfは属性を呼び出します.blockはself参照カウントに1を加算し、最終的にはループ参照の問題を引き起こすからです.
*転送(secondからfirstに転送)blockは、プロキシ転送定義FirstView(ルートビューコントローラ)およびScondView"SecondView.h"ファイルと同様の値を転送します.
インタフェース間の通信に使用でき、同時に値を伝達することができる.
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;
};
}