真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ios開發(fā)懶加載,iOS 懶加載

ios的懶加載和set 方法可以用self嗎

在程序設(shè)計中,我們經(jīng)常會使用 懶加載 ,顧名思義,就是用到的時候再開辟空間,比如iOS開發(fā)中的最常用控件UITableView,實現(xiàn)數(shù)據(jù)源方法的時候,通常我們都會這樣寫Objective-C- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.dataArray.count; }- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ //1.得到cell XWShopCell *cell = [XWShopCell cellWithTableView:tableView]; //2.傳遞模型 cell.wine = self.dataArray[indexPath.row]; //3.回傳cell return cell; }上面的的代碼中return self.dataArray.count;其實就是利用@property (nonatomic, strong) NSArray *dataArray;@property 的特性,為屬性生成了get和set方法,而這里是調(diào)用的get方法,但是上述代碼中return self.dataArray.count 會調(diào)用- (NSArray *)dataArray{ return _dataArray}這樣調(diào)用,如果成員屬性dataArray 開始沒有賦值的,那么在使用的時候,調(diào)用get方法,不重寫的話,會報錯,空指針,所以一般我們會重寫get方法//重寫get方法 - (NSArray *)dataArray { if (nil == _dataArray){ _dataArray = [NSArray array]; } return _dataArray }這樣寫,就防止了成員屬性為沒有賦值的情況綜上所述,Objective-C的懶加載,其實就是調(diào)用成員屬性的get方法,初始化值,而Swift的懶加載,是和Objective-C不同的Swift//MARK tablview的 dataSource 代理方法 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) - Int{ return self.dataArray.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) - UITableViewCell{ //1.得到cell let cell = XWShopCell.cellWithTableView(tableView) //2.傳遞模型 cell.wine = self.dataArray[indexPath.row] //3.回傳cell return cell }而這句return self.dataArray.count在Swift 存儲屬性必須初始化,確認類型,或者用可選類型,總之要確認類型,畢竟Swfit是類型安全語言,所以Swift提出了lazy屬性,用法//1.分析 NSArray 是一個閉包的返回值,而這是一個沒有參數(shù)的閉包 lazy var dataArray:NSArray = { [] }() //2.也可以寫成這樣 lazy var dataArray:NSArray = { return NSArray() }()//3.從plist文件加載 lazy var dataArray:ArrayXWWine = { let winePath = NSBundle.mainBundle().pathForResource("wine.plist", ofType: nil)! let winesM = NSMutableArray(contentsOfFile: winePath); var tmpArray:ArrayXWWine! = [] for tmpWineDict in winesM! { var wine:XWWine = XWWine.wineWithDict(tmpWineDict as! NSDictionary) tmpArray.append(wine) } print("我就運行一次") return tmpArray }()上述的代碼,有點難理解,如果之前會Objective-C的block 或者對C語言的函數(shù)指針理解透徹的,可以看成是一個代碼塊,然后self.dataArray的時候,就執(zhí)行了代碼塊,但是重復(fù)調(diào)用,Lazy 屬性的代碼塊只會調(diào)用一次,lazy修飾的是一個存儲屬性,而存放的是閉包,我想內(nèi)部,應(yīng)該進行了優(yōu)化。

創(chuàng)新互聯(lián)建站專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、崖州網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開發(fā)、商城建設(shè)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為崖州等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

iOS開發(fā)之CoreLocaiton框架使用(指南針)

1.準(zhǔn)備一張指南針的圖片(下面圖片可以使用)

2.導(dǎo)入CoreLocation框架以及對應(yīng)的主頭文件 并且設(shè)置代理

3.懶加載創(chuàng)建CLLocationManager對象并設(shè)置代理

4. 調(diào)用方法, 開始獲取設(shè)備朝向? ?

5. 在對應(yīng)的代理方法中獲取設(shè)備朝向信息

iOS swift 懶加載的使用

記錄一下swift的懶加載?

OC回顧懶加載

- (UIButton *)but{

if (!_but){

_but = [UIButton buttonWithType:UIButtonTypeCustom];

[_but setTitle:@"寶貝" forState:UIControlStateNormal];

}

return _but;

}

下面來看swift怎么創(chuàng)建懶加載用到關(guān)鍵字lazy

swift有兩種加載方法

第一種方式

lazy var butt = UIButton()

第二種方式可以設(shè)置更多的屬性

lazy var but:UIButton ={

let but =UIButton()

but.setTitle("按鈕", for: .normal)

return but

}()

override func viewDidLoad() {

super.viewDidLoad()

// Do any additional setup after loading the view.

print(but)

}

總結(jié):用到的時候再加載,多次用到只加載一次,swift里用lazy關(guān)鍵字創(chuàng)建懶加載

鏈接:

iOS支持懶加載的PageViewController

這個控件包含兩個部分:

相信大家都知道iOS原生的UIPageViewController,用它可以實現(xiàn)橫向翻頁的效果,TWPageViewController(可以在[這里][1]看到源碼)同樣也是用來實現(xiàn)橫向翻頁的效果,配合TWPageTitleViewController使用,可以實現(xiàn)類似于騰訊新聞、今日頭條這樣的app的效果。如下圖所示:

在新功能開發(fā)中,其實也考慮過使用系統(tǒng)的UIPageViewController,但是UIPageViewController有如下的缺點:

主要還是因為UIPageViewController不支持懶加載,所以才打算自己動手寫一個類似UIPageViewController的控件。

其實實現(xiàn)起來,原理是很簡單的,基于UIScrollView去開發(fā)就行了,只不過需要細心的處理好子Controller的生命周期,比如:什么時候調(diào)用viewWillAppear:,什么時候調(diào)用viewWillDisappear:等。

TWPageViewController實現(xiàn)了以下幾個特性:

以子Controller的class做key,放入復(fù)用池,下回加載同類型的viewcontroller則從復(fù)用池里面取去來,每種類型的viewcontroller會緩存一個。這樣省去了開辟viewcontroller的內(nèi)存以及cpu的消耗。如果復(fù)用池沒有相應(yīng)類型的viewcontroller則會創(chuàng)建一個。在實際應(yīng)用中可以將UI部分以及數(shù)據(jù)部分剝離開來,UI部分復(fù)用,而數(shù)據(jù)部分緩存起來,一遍下回直接加載。

在滾動停止以后(其實就是在scrollViewDidEndDecelerating:中去調(diào)用加載子Controller的回調(diào)函數(shù))才會去加載ViewController。以保證快速滑動過程的流暢,同時可以免去過程中的其他操作的資源消耗(比如途中的子Controller的網(wǎng)絡(luò)請求)。

如果子Controller的數(shù)目大于3,則內(nèi)存中只會保存3+N個viewController,3表示前一個、當(dāng)前、后一個子Controller,N等于viewController類型的數(shù)目。小于等于3就等于實際的子Controller的數(shù)目。

比如向左拖拽不放的情況下,當(dāng)前子Controller的viewWillDisappear:會被回調(diào),同時會回調(diào)下一個子Controller的viewWillAppear:,停下后,如果是停留在下一個子Controller,那么它的viewDidAppear:會被回調(diào),同時上一個的viewDidDisappear:會被回調(diào)。

這些回調(diào)有:

如果發(fā)現(xiàn)有任何問題,麻煩指出,我會及時修正,同時需要查看完整實現(xiàn)以及Demo,請點擊[這里][1]。

[1]:

ios 數(shù)據(jù)懶加載和系統(tǒng)的get方法的區(qū)別

在程序設(shè)計中,我們經(jīng)常會使用 懶加載 ,顧名思義,就是用到的時候再開辟空間,比如iOS開發(fā)中的最常用控件UITableView,實現(xiàn)數(shù)據(jù)源方法的時候,通常我們都會這樣寫

Objective-C

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return self.dataArray.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

//1.得到cell

XWShopCell *cell = [XWShopCell cellWithTableView:tableView];

//2.傳遞模型

cell.wine = self.dataArray[indexPath.row];

//3.回傳cell

return cell;

}

上面的的代碼中

return self.dataArray.count;

其實就是利用

@property (nonatomic, strong) NSArray *dataArray;

@property 的特性,為屬性生成了get和set方法,而這里是調(diào)用的get方法,但是上述代碼中return self.dataArray.count 會調(diào)用

- (NSArray *)dataArray{ return _dataArray}

這樣調(diào)用,如果成員屬性dataArray 開始沒有賦值的,那么在使用的時候,調(diào)用get方法,不重寫的話,會報錯,空指針,所以一般我們會重寫get方法

//重寫get方法

- (NSArray *)dataArray

{

if (nil == _dataArray){

_dataArray = [NSArray array];

}

return _dataArray

}

這樣寫,就防止了成員屬性為沒有賦值的情況

綜上所述,Objective-C的懶加載,其實就是調(diào)用成員屬性的get方法,初始化值,而Swift的懶加載,是和Objective-C不同的

Swift

//MARK tablview的 dataSource 代理方法

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) - Int{

return self.dataArray.count

}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) - UITableViewCell{

//1.得到cell

let cell = XWShopCell.cellWithTableView(tableView)

//2.傳遞模型

cell.wine = self.dataArray[indexPath.row]

//3.回傳cell

return cell

}

而這句

return self.dataArray.count

在Swift 存儲屬性必須初始化,確認類型,或者用可選類型,總之要確認類型,畢竟Swfit是類型安全語言,所以Swift提出了lazy屬性,用法

//1.分析 NSArray 是一個閉包的返回值,而這是一個沒有參數(shù)的閉包

lazy var dataArray:NSArray = { [] }()

//2.也可以寫成這樣 lazy var dataArray:NSArray = { return NSArray() }()

//3.從plist文件加載

lazy var dataArray:ArrayXWWine = {

let winePath = NSBundle.mainBundle().pathForResource("wine.plist", ofType: nil)!

let winesM = NSMutableArray(contentsOfFile: winePath);

var tmpArray:ArrayXWWine! = []

for tmpWineDict in winesM! {

var wine:XWWine = XWWine.wineWithDict(tmpWineDict as! NSDictionary)

tmpArray.append(wine)

}

print("我就運行一次")

return tmpArray }()

上述的代碼,有點難理解,如果之前會Objective-C的block 或者對C語言的函數(shù)指針理解透徹的,可以看成是一個代碼塊,然后self.dataArray的時候,就執(zhí)行了代碼塊,但是重復(fù)調(diào)用,Lazy 屬性的代碼塊只會調(diào)用一次,lazy修飾的是一個存儲屬性,而存放的是閉包,我想內(nèi)部,應(yīng)該進行了優(yōu)化。


網(wǎng)頁名稱:ios開發(fā)懶加載,iOS 懶加載
分享鏈接:http://weahome.cn/article/phheii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部