1. 程式人生 > >iOS 學會使用delegate和block

iOS 學會使用delegate和block

       畢業將近半年了,從事iOS開發也一年多了,入了iOS這個行列,算是一個明智之舉吧,iOS開發帶給我了很多歡樂,當然了,也給了我物質上很大的滿足,今天我來給說一下自己對delegate和block的理解,說的不對的地方,希望大家指正。

     delegate和block我感覺是一樣的,但是block比delegate使用的簡單,而delegate比block理解起來簡單,所以說,如果跟我一樣是小白的話,那麼就先好好學delegate, 懂了之後再往block上套,一定會理解透徹的,定義delegate儘量用weak,不用assign.警告:delegete是物件的代理方法,而不是類,所以定義或者使用代理都是在物件方法中用,在類方法中是沒法用的

     所謂delegate,其實跟我們日常生活中的代理一樣,日常生活中的代理是什麼樣呢,為了防止我們這些程式設計師不關注日常生活中的代理,我在這先說說日常生活中的代理,舉一個簡單的例子,比如說蘇寧電器(有點做廣告的意思)蘇寧電器自己是不生產產品的,蘇寧自身就是一個代理,他是聯想,是蘋果,是夏普等的代理,蘇寧幫助這些廠家來賣產品,蘇寧會和各個廠家簽訂合同來幫助廠家賣她們的產品,也就是類似於蘋果中,實現方(被動方)可以遵守多個協議,各個實現,當然了,主動方也可以制定多個合約,讓不同的被動方(代理)來幫助他做事,在蘋果中意思就是被動方可以遵守多個協議,主動方可以制定多個協議,它們之間並不是那麼真心的。好了,我下邊給一個demo來幫我們理解,這個demo實現的很簡單,就是一個view繼承於NSObject,他想實現一個彈窗效果,就制定一個協議,並寫上了協議需要實現的方法,然後自己就不管了,這個時候,一個controller看到了,很感興趣,趕緊招呼view,說他能幫助view實現這個效果,可能需要報酬(至於報酬是什麼,我就不知道了),於是,view和controller談好利益後,view就把controller設定為了代理,然後,controller就實現了這個彈窗效果,等view需要這個效果的時候,招呼一下controller,回撥一下就可以了。程式碼如下:

view.h中 

#import <Foundation/Foundation.h>

@protocol updateAlertDelegate <NSObject>

- (void)showAlert;

@end

@interface View :NSObject

@property (nonatomic,weak)id <updateAlertDelegate>delegate;

- (void)startTimer;

@end

view.m 中:

#import "View.h"

@implementation View

- (void)startTimer {

    [NSTimerscheduledTimerWithTimeInterval:5.0ftarget:selfselector:@selector(update11)userInfo:nilrepeats:YES];

}

- (void)update11 {

    if (self.delegate&&[self.delegaterespondsToSelector:@selector(showAlert)]) {

        [self.delegateshowAlert];

    }

 }

@end

controller.m中:

#import"ViewController.h"

@interfaceViewController ()<updateAlertDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {

    [superviewDidLoad];

self.view.backgroundColor = [UIColorredColor];

    View *view = [[Viewalloc]init];

    view.delegate =self;

    [view startTimer];

}

- (void)showAlert {

UIAlertController *alert = [UIAlertControlleralertControllerWithTitle:@"alert"message:@"This is a alert"preferredStyle:UIAlertControllerStyleAlert];

   [alertaddTextFieldWithConfigurationHandler:^(UITextField *_Nonnull textField) {

      textField.keyboardType =UIKeyboardTypeNumberPad;

   }];

   [alertaddAction:[UIAlertActionactionWithTitle:@"Cancel"style:UIAlertActionStyleCancelhandler:nil]];

   [alertaddAction:[UIAlertActionactionWithTitle:@"Delete"style:UIAlertActionStyleDestructivehandler:nil]];

   [alertaddAction:[UIAlertActionactionWithTitle:@"OK"style:UIAlertActionStyleDefaulthandler:nil]];

   [selfpresentViewController:alertanimated:YEScompletion:nil];

}

- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

自己試著敲敲,就這麼回事,至於block,我會在下一篇來說


相關推薦

iOS 學會使用delegateblock

       畢業將近半年了,從事iOS開發也一年多了,入了iOS這個行列,算是一個明智之舉吧,iOS開發帶給我了很多歡樂,當然了,也給了我物質上很大的滿足,今天我來給說一下自己對delegate和block的理解,說的不對的地方,希望大家指正。      delegate

IOS學習之一個示例弄懂代理(delegate)協議

轉自http://blog.csdn.net/pony_maggie/article/details/25655443 代理和協議的語法這裡不贅述,自己查資料。 這個demo的思路是這樣的,有一個A類,這個類不是一個基於檢視類,它繼承自NSObject,這個類會啟動

iOSdelegate代理物件使用weakassign哪個

       之前不停應用的是assign,本日除錯一段程式碼的時間,發明順序會crash失落,報錯EXC_BAD_ACCESS 經由一番研討,發明若是應用 @property (nonatomic,

iOS 物件之間的通訊方式(delegateblock、NSNotification、kvc、kvo)總結

有五種方式:delegate(代理)、block(程式碼塊)、NSNotification(通知)、kvc(鍵-值編碼)、kvo(​鍵值觀察模式) 1. delegate:代理是一種設計模式,它是通過被代理者定義代理協議委託代理者實現協議,用於兩個物件間的通訊互動。在

IOS學習之委託block

轉載請註明出處 作者:小馬 這篇文章建議和前一篇一起看, 另外先弄清楚IOS的block是神馬東東。 委託和block是IOS上實現回撥的兩種機制。Block基本可以代替委託的功能,而且實現起來比較簡潔,比較推薦能用block的地方不要用委託。 本篇的demo和

KVO,NSNotification、BlockDelegateKVO的區別

在 Objective-C 中如何實現 KVO KVO中誰要監聽誰註冊,然後對響應進行處理,使得觀察者與被觀察者完全解耦。KVO只檢測類中的屬性,並且屬性名都是通過NSString來查詢,編譯器不會檢錯和補全,全部取決於自己。 代理的作用 代理又叫委託,是一種設計模式,代理是物件與物件之間的通訊互動,代理解除

iOS 代理block的理解

首先兩者作用是一樣的,都是進行單一回調。不通的是,delegate是個物件,然後用過一個物件自己呼叫代理協議函式來完成整個流程。block是傳遞一個函式指標,利用函式指標執行來進行回撥。還有在記憶體管理上需要注意,delegate不需要儲存引用。block對引用資料有cop

ios學習8_KVC字典轉模型

strong format des source -a ldr orm resource undle Key Value Coding是cocoa的一個標準組成部分,它能讓我們能夠通過name(key)的方式訪問屬性,某些情況下極大地簡化了代碼。可稱之為cocoa的大招

qt-qml移動開發之在ios上開發部署app流程簡單介紹

mod target auto 100% rda 自己 color ans ora qt5.3已經全面支持移動開發,除了mac,windows,linux。還支持ios,android,wp,meego等移動平臺,本教程是作者依據自己的經驗,從頭講怎麽樣在ios上公布

iOS-swift-協議拓展

desc rop turn ted ext 註意 color int ret 1 協議(protocol) 使用關鍵字 protocol 創建協議。 protocol ExampleProtocol { var simpleDescript

一定會學會反思思考

-1 png mage image alt ges 反思 思考 .cn 一定會學會反思和思考

iOS開發者證書描述文件申請

保存 content iphone 2個 gem 密碼 ica nsh 推送 iOS開發者證書是用於開發調試的,可以直接連接你的xcode進行灌裝到你的設備進行測試,第一步需要添加你的設備id然後再申請iOS開發證書。 現在xcode也可以免證書進行調試了。 一、添加

iOS-事件傳遞響應機制

系統 || 聯系 轉換 face dds average 問題 特殊 轉自:http://www.jianshu.com/p/2e074db792ba 前言: 按照時間順序,事件的生命周期是這樣的:  事件的產生和傳遞(事件如何從父控件傳遞到子控件並尋找到最合適的view

vnx通過iscsi連接esxi主機,並掛載nfsblock

iscsi vm主要步驟:1) vnx上創建一個nas folder,這個nas裏面有一個放了一個vm文件夾2) esxi上掛載nfs3) vnx上創建block pool與lun4) vnx上設置iscsi連接-> 設置iscsi的port以及連接vcenter5)venter上設置iscsi連接-&

Linux文件訪問流程及磁盤inodeblock總結

指針 文件屬性 image sts 技術分享 不能 mkf 文件名 .cn Linux文件訪問流程 inode是文件的唯一標識,文件名和inode的對應關系存放在上一級目錄的block中;inode裏有指向文件block的指針和文件的屬性,從而通過block獲得文件數據。

UI設計規範整理一iOS字體切圖及規範

icon 頁面設計 nologin 例如 必須 協作 設計規範 ogr 喜歡 UI設計規範一iOS字體和切圖及規範 說明: 1.對象為程序員等開發人員。 2.方法有千種,僅供參考。 3.文檔的本質是備份與查看,對外方便協作與對內提升效率。 4.文檔不是萬能的,如果文檔查看

iOS繪圖—— UIBezierPath Core Graphics

font object move -s 決定 三角形 參數 ren crt 前言 iOS系統本身提供了兩套繪圖的框架,即UIBezierPath 和 Core Graphics。而前者所屬UIKit,其實是對Core Graphics框架關於path的進一步封裝,所以使用

inodeblock

至少 inode 訪問 索引 硬鏈接 創建 比較 格式化 兩個 inode索引節點作用:存放的是文件的屬性和時間類型權限等唯一不包括文件名block:塊 存放文件內容的地方,存放數據的位置 怎麽來的?①inode和block是格式化創建系統時產生②訪問文件的過程查看inod

flask模版繼承block

adding 相同 for comm __main__ div _for 似的 代碼量 模版繼承和block的目的就是為了減少前端代碼量 flask_ones.py #encoding:utf-8 from flask import Flask,url_fo

ios 證書申請發布流程

devel 本地 我沒 doc issue 做的 工作 ima 構建 證書是什麽? 上面這個就是我們申請好證書後,下載到本地的.cer文件,也就是常說的開發證書與發布證書的樣式。這.cer文件格式的證書是讓開發者使用的設備(也就是你的Mac)有真機調試