iOS Block使用

來源:互聯網
上載者:User

iOS Block使用

 

#import ViewController.h
/*
使用Block最大的一個好處就是可以在代碼塊中隨時訪問外部變數

比如你在A.class類中的某個方法中聲明了一段代碼塊.你可以在代碼塊中直接對A.class所擁有的成員變數進行調用,並且,通過一定的條件(__block),還可以隨時的修改這些變數的值和指標

釋放某個不再需要使用的Block成員變數,只需要將其設定nil即可

為局部變數加上__block修飾,可以改變局部變數的值

在Block裡面可以隨時訪問全域變數,靜態變數等,並對它們的值和指標進行修改.

但在Block中直接使用所在聲明地區的類的成員變數和self時也是可以直接使用和修改的,但需要注意循環參考.

*/
typedef BOOL (^block2)(void);

@interface ViewController ()
@property (strong, nonatomic) IBOutlet UIButton *block1;
- (IBAction)touchBlock1:(id)sender;
- (IBAction)touchBlock2:(id)sender;
- (IBAction)touchBlock3:(id)sender;

@property (nonatomic,copy) NSString *str2;
@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
#pragma mark -block用法1
- (IBAction)touchBlock1:(id)sender {
// void是代碼塊的傳回值,int是代碼塊的參數
void (^MyBlock1)(int i)=^(int i){
NSLog(@block===1====%d,i);
};
//給block代碼塊傳入int類型的參數10
MyBlock1(10);
}
#pragma mark -block用法2 在Block裡面可以隨時訪問全域變數,靜態變數等,並對它們的值和指標進行修改.
- (IBAction)touchBlock2:(id)sender {
/*
首先,在block之前定義對self的一個弱引用wSelf,因為是弱引用,所以當self被釋放時wSlelf會變為nil,然後在block中引用該弱引用,考慮到多線程情況,通過使用強引用sself來引用該弱引用,這時如果 self 不為 nil 就會 retain self,以防止在後面的使用過程中 self 被釋放;然後在之後的 block 塊中使用該強引用 sself,注意在使用前要對 sself 進行了 nil 檢測,因為多線程環境下在用弱引用 wself 對強引用 sself 賦值時,弱引用 wself 可能已經為 nil 了。
通過這種手法,block 就不會持有 self 的引用,從而打破了循環參考。
*/
//防止循環參考
__weak ViewController *wSelf = self;
//__weak typeof(self) weakSelf = self;
void (^changeValue)(NSString *)=^(NSString *str){
wSelf.str2=str;
ViewController * sself = wSelf;
if (sself) {
NSLog(@%@, sself);
}else {
NSLog(@ dealloc before we could run this code.);
}
};
//給block代碼塊傳入參數
changeValue(@block2);
NSLog(@self.str2:%@,self.str2);
}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.