国产性生交xxxxx免费-国产中文字幕-啊灬啊灬啊灬快灬高潮了,亚洲国产午夜精品理论片在线播放 ,亚洲欧洲日本无在线码,色爽交视频免费观看

鍋爐信息網 > 鍋爐知識 > 鍋爐百科

鏈式編程在iOS開發中的應用

發布時間:

前言先來了解下開發過程中常常接觸的幾個編程思想:面向過程:處理事情以過程為核心,一步一步的實現。函數式編程思想:是把操作盡量寫成

前言

先來了解下開發過程中常常接觸的幾個編程思想:

  1. 面向過程:處理事情以過程為核心,一步一步的實現。
  2. 函數式編程思想:是把操作盡量寫成一系列嵌套的函數或者方法調用。
函數式編程特點:每個方法必須有返回值(本身對象),把函數或者Block當做參數,block參數(需要操作的值)block返回值(操作結果) 代表:ReactiveCocoa
  1. 面向對象:萬物皆對象
面向對象對比面向過程的優勝之處在于,名詞化的概念比動詞化的描述,更便于人類理解。 這也是相比函數式編程的主要優點,許多函數是難以命名的,但對象卻很容易。 回顧下封裝、繼承、多態。

封裝是為了更好的重用性、可擴展性,但要綜合考慮性能問題,即使新增了判斷也會增加性能,只是不會量級的增加。 比如簡單工廠和抽象工廠(反射機制)的封裝,會增加性能的消耗。但把對象的管理變成了可配置化。

  1. 鏈式編程思想:將多個操作(多行代碼)通過點號(.)鏈接在一起成為一句代碼,使代碼可讀性好a(1).b(2).c(3)。
鏈式編程特點:方法的返回值是block,block必須有返回值(本身對象),block參數(需要操作的值) 代表:masonry框架

p.run() <=> [p run]();//執行方法的同時之后,立即執行方法返回的blockn

  1. 響應式編程思想:不需要考慮調用順序,只需要知道考慮結果,類似于蝴蝶效應,產生一個事件,會影響很多東西,這些事件像流一樣的傳播出去,然后影響結果,借用面向對象的一句話,萬物皆是流。
代表: a. KVO 是 Objective-C 對觀察者模式(Observer Pattern)的實現,也是 Cocoa Binding 的基礎。當被觀察對象的某個屬性發生更改時,觀察者對象會獲得通知。 b. Reactive Cocoa框架

查看原文關注公眾號【iOS逆向】

I 、鏈式編程的例子


1.1 實現鏈式編程的兩種形式

  1. 聲明屬性,屬性的類型是block,block必須有返回值(本身對象),block參數(需要操作的值)
  2. 聲明方法: 缺點就是 Xcode提示不太友好。不推薦
本質都是一樣的,就是執行(getter)方法之后,得到一個block,block必須有返回值(本身對象),block參數(需要操作的值)

1.2 通過聲明方法形式實現鏈式編程

缺點就是 Xcode提示不太友好。不推薦`

block 實現鏈式編程的例子1:(將block和method的特性 結合起來) https://github.com/zhangkn/DKUsingblockImplementChainProgramming
直接聲明方法的返回值是block,block必須有返回值(本身對象),block參數(需要操作的值)

例子: p.run() <=> [p run]() 效果:p.run() <=> [p run]();// 執行方法的同時之后,立即執行方法返回的block。

int main(int argc, const char * argv[]) {n @autoreleasepool {n // insert code here...n //使用block實現鏈式編程n People *p= [[People alloc]init];n// p.run() <=> [p run]();// 執行方法的同時之后,立即執行方法返回的block。n p.run().study();n n p.run().name(@"將block和method的特性 結合起來");n n n }n return 0;n}n

代碼的實現

#import "People.h"nn@implementation Peoplenn- (People *(^)())run{n return ^{n NSLog(@"run");n return self;n };// 返回一個blockn}nnn- (People *(^)())study{n return ^{n NSLog(@"study");n return self;n };// 返回一個blockn}nnn- (People *(^)(NSString *))name{n return ^(NSString *name){n NSLog(@"%@",name);n return self;n };n}nn

1.3 通過聲明屬性形式實現鏈式編程

聲明屬性,屬性的類型是block,block必須有返回值(本身對象),block參數(需要操作的值)

聲明屬性: 本質就是利用他的getter方法
完整SDK源碼【封裝富文本API,采用block實現鏈式編程】(block 的妙用:結合block和方法的優點實現iOS的鏈式編程)
  1. 文章:https://blog.csdn.net/z929118967/article/details/107835195
  2. 從CSDN資源下載完整SDK代碼:https://download.csdn.net/download/u011018979/14038715
  3. 部分API
  1. 用法例子


NSMutableAttributedString *xx = [[NSMutableAttributedString alloc]init];n n n xx.kn_addString(@"封裝富文本API").kn_fontColor(UIColor.redColor).kn_addString(@"采用block實現鏈式編程").kn_fontColor(UIColor.blueColor).kn_addString(@"!");nn

https://github.com/zhangkn/ChainAttributedString

以Masonry 框架為例子,進行分析

調用的equalTo:方法 返回的就是一個返回值為MASConstraint的block

- (MASConstraint * (^)(id))equalTo { return ^id(id attribute) { return self.equalToWithRelation(attribute, NSLayoutRelationEqual); }; }n

用法

- (UIImageView *)imgForReason{n n if (nil == _imgForReason) {n n n n UIImageView *img2 = [[UIImageView alloc] init];n n _imgForReason = img2;n n [self addSubview:_imgForReason]; n n [img2 mas_makeConstraints:^(MASConstraintMaker *make) {n n make.left.equalTo(self.mas_left).offset(25);n n make.top.equalTo(self.imgForPassword.mas_bottom).offset(12);n n make.size.mas_equalTo(CGSizeMake(kScreenWidth-100, 76));n n n n }];n n n n }n n return _imgForReason;n n}n

II、函數式編程總結

  • 如果想再去調用別的對象方法,那么就需要返回一個對象;
  • 如果想用()去執行,那么需要返回一個block;
  • 如果想讓返回的block再調用對象的方法,那么這個block就需要返回一個對象(即 返回值為一個對象的block)。

更多編程思想請到#公眾號:iOS逆向交流

see also

iOS富文本&圖文混排的使用指南

1、封裝富文本API,采用block實現鏈式編程
2、 超鏈接屬性
3、HTML字符串與富文本互轉
4、創建帶有圖片的富文本
————————————————
版權聲明:本文為CSDN博主「#公眾號:iOS逆向」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/z929118967/article/details/114014827

開閉原則

一個軟件實體如類,模塊和函數應該對擴展開放,對修改關閉。

Software entities like classes,modules and functions should be open for extension but closed for modifications. 開閉原則是應對需求變更的最基本手段。

寫程序的小感悟

在開發程序的時候必須要考慮到運維的簡單性。

因為越復雜的運維需求,導致越高的事故率,70% 的線上事故是和運維操作有關.

游戲程序優化的基本出發點

游戲程序的基本特點,是對延遲的苛刻要求,以及對數據準確性的不苛刻要求。

軟件系統性能提高的最常用手段有兩個,其一是緩存,其二是分布。

緩存就是時空轉換,以時間、空間中富裕的一種去彌補緊缺的另外一種; 分布就是增加多個硬件一起解決問題,核心是如何分配以及最后結合這些工作任務。

設計模式,是利用面向對象的語言特性,去解決一系列常見問題的典型方法。

數據結構加算法等于程序,這個描述現在來看并不完整。需要被程序處理的數據,同樣是一個程序的重要組成部分。數據流中的輸入和輸出永遠是至關重要的。

精選推薦

  • 711關東煮供應商
    711關東煮供應商

    今天給大家介紹三位,奶粉,全家、羅森這些便利店里關東煮的供應商。店里賣三四塊錢一串的關東煮,在網上買不到,一塊錢就搞定。首先關東

  • 健康日歷|高壓鍋容易爆炸的4個原因
    健康日歷|高壓鍋容易爆炸的4個原因

    來源:醫藥養生保健報設計:李雅琴醫學審核:姜峰出品人:胡麗麗

  • 高爐
    高爐

    今天這活卻是個白事,等到了時辰,那家人便準備火化,本來準備送普爐,我卻心中一動,便對那家人說道:“這老人走也不要省,還是送高爐吧。”

  • 高壓鍋和電壓力鍋的區別,推薦幾款點壓力鍋
    高壓鍋和電壓力鍋的區別,推薦幾款點壓

    記得之前有一次去朋友家玩,他正在用高壓鍋煮小米粥,是的,高壓鍋壓小米粥,大概煮了半小時,高壓鍋突然爆炸了,現場慘不忍睹啊,幸好廚房里沒

0