iOS--storyBoard使用Block傳值

1. 在方法裏面定義的Block是存儲在棧區的,方法調用完畢以後Block佔用的內存就會被銷燬.若是須要在其餘方法裏面使用該Block須要把Block定義成屬性,修飾成copy,這樣     就會把棧區的內容拷貝一份到堆區.app

2. 解決Block的內存循環引用問題.spa

當一個對象對Block持有全部權.在Block又使用該對象的內容(self或者該對象的實例變量),會致使Block的內存循環引用 解決方案,在ARC中用__weak修飾該指針, 在MRC中用__Block修飾該指針.指針

 

 

 

 

 

//點擊cell跳轉時觸發
// In a storyboard-based application, you will often want to do a little preparation before navigation對象

在使用storyBoard時進行傳值是的操做.索引

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    //獲得目的視圖
    DetailViewController * detailVC = [segue destinationViewController];
    //獲得點擊的cell
    ContactTableViewCell * cell = sender;
    //獲得索引值
    NSIndexPath * indexPath = [self.tableView indexPathForCell:cell];
    //傳值.
    detailVC.string = [self.MArray objectAtIndex:indexPath.row];
    __weak ContactTableViewCell *cellTwo = cell;
    __weak DetailViewController *detailTwoVC = detailVC;
    [detailTwoVC showTFStringBlock:^(NSString *str) {
        //給cell賦值.
        cellTwo.aLabel.text = str;
        //在MRC下用__BLock解決循環引用問題防止引用計數加1, 在ARC環境下用__weak解決循環引用問題,防止cell,detailVC所持有的對象引用計數加一.
        detailTwoVC.view.backgroundColor = [UIColor redColor];
    }];
}內存

相關文章
相關標籤/搜索