意圖保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點
主要解決乙個全域性使用的類頻繁地建立與銷毀
何時使用當您想控制例項數目,節省系統資源的時候
優點在記憶體裡只有乙個例項,減少了記憶體的開銷,尤其是頻繁的建立和銷毀例項
static dbdmanager *manager = nil;
@implementation dbdmanager
+(instancetype)sharedleton );
}return manager;}+
(id) allocwithzone:
(struct _nszone *
)zone
-(id) copywithzone:
(struct _nszone *
)zone
dispatch_ once _t: 使用 dispatch_once 方法能保證某段**在程式執行過程中只被執行 1 次,並且即使在多執行緒的環境下,dispatch _once也可以保證執行緒安全。 用在這裡就是只建立一次manger,不會建立不同的manger建立乙個全域性的manager類,使用例項manager進行網路請求,再使用block傳遞請求到的資料,在model裡完成資料解析
我怕不能完美的使用block,所以我們直接看組長的豆瓣demo
//manager類的.**件中
typedef
void
(^allmoviehandle)
(dbdmoviemodel *allmoviemodel)
;//返回值型別(^塊變數名)(形參型別);
//塊變數名當然是自己起的名字 (起乙個讓別人知道這個block是幹什麼的那種名字
//形參型別:網路請求到的資料用在哪乙個model裡,後面名字怎麼起懂的都懂
typedef
void
(^errorhandle)
(nserror *error)
;//nserror是系統錯誤資訊類
//manager類的.m檔案中
//其中乙個網路請求的方法-(
void
)networkwithnumber:
(nsinteger)number succeed:
(allmoviehandle)successblock error:
(errorhandle)errorblock
//形參是網路請求成功或者失敗的block
值得注意的是,在if
(error == nil)
else
[datatask resume]
;
error == nil
中已經完成了dbdmoviemodel
的初始化
我搜了使用這個方法的地方,貼一下主要**
網路請求非常耗時,不能等請求到了資料再進行下面的工作,所以要使用非同步請求[
[dbdmanager sharedleton] networkwithnumber:
1 succeed:
^(dbdmoviemodel *allmoviemodel));
} error:
^(nserror *error)
];
同步:非同步:
dispatch_sync //同步請求
呼叫 dispatch_sync的執行緒會等dispatch_sync的內容執行完再繼續執行。
dispatch_async //非同步請求
呼叫 dispatch_async的執行緒不會的等dispatch_async的內容,自己繼續執行。
dispatch_async
中加入dispatch_get_main_queue
中,是非同步執行中把主佇列中的執行任務放到主線程中去執行,即完成ui介面的更新,而網路請求已經在子執行緒中完成。
網路請求 簡單的封裝乙個請求
我們可以新建乙個 server 資料夾 裡面建立乙個server.js 檔案,來集中處理我們專案中用到的請求 var server function url,type,params method type get success function res fail function res get請...
封裝乙個JSONP請求
首先,先介紹下jsonp的跨域原理 1 動態建立script標籤 2 利用 script 的src屬性,會自動傳送請求 3 只需要將要請求的位址設定為 script標籤的src屬性的值 4 需要服務端的介面配合,必須返回 jsonp 格式的資料才行 注意 1 需要有個支援 jsonp 請求的介面位址...
Axios請求封裝乙個公共的請求頭
assets commom js 下新建乙個js檔案 eg requestparams.js function buildrequestparam conparam con conparam return param 重要的事情說三遍,一定要匯出,一定要匯出,一定要匯出 export default...