国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS開發知識總結(一)

2019-11-08 00:02:22
字體:
來源:轉載
供稿:網友

一、Xcode工具配置 1、網絡訪問配置: 在Info.plist文件中添加App Transport Security Settings->NSAllowsAritraryLoads-> YES 2、iOS10之后權限設置: 同樣需要在Info.plist文件中直接添加 PRivacy - Media Library Usage Description 訪問媒體資料庫 Privacy - Bluetooth Peripheral Usage Description 訪問藍牙等系統功能在需要調用的時候都需要進行請求授權操作。 3、以上操作有兩種方式可以設置 <1>.直接Xcode打開Info.plist文件直接添加,如圖: Info.plist直接操作 <2>.選擇Info.plist->右擊->Open As->Source Code,如圖: Open As Source Code 打開之后如下,可以直接在code中添加: ccode中打開Info.plist文件 二、設計模式 1、什么事設計模式? 在軟件設計?,是對通?問題的可復?的解決?案!

2、為什么要用設計模式? 設計模式是?系列幫你寫出更可理解和易復?代碼的模板,設計模式幫你創建低耦合的代碼以便你不需要費多??就可以改變或者替換代碼中的組件

3、設計模式類型有? <1>.創建型:單例(單態)和抽象工廠 <2>.結構型:模型-視圖-控制器,裝飾器、適配器,外觀和組合模式 <3>.行為型:觀察者、備忘錄、責任鏈和命令模式

4、什么時候,如何使?,什么樣的,設計模式? <1>.MVC(解偶和)(復?-拓展-維護) Model -View- Controller 模型-視圖-控制器model和view之間是相互獨?的,不知道對?的存在;controller負責他們之間的溝通和聯系,實現低耦合,從?使代碼易復?,易維護,易拓展 的;控制器的?為通過三種技術實現,delegate,targetaction,notification-kvo; C對M:API C對V:Outlet V對C:Target-action, Delegate,Datasource M對C:Notification,KVO

<2>.單例模式(整個?程對象唯?/節省資源-全局變量/保持數據) 概念: 核心結構中只包含一個被稱為單例的特殊類,用static聲明單例對象(全局變量),確保此工程唯一實例對象(且該實例易于外界訪問),對象的實例變量和屬性的生命周期是整個工程開始和結束,目的是為數據保存共享,注意多線程條件下加鎖,避免多線程同時創建單例!(如果需要多次調用對象的屬性保存添加數據,就用單例,而普通對象重復創建無法保存長期數據)

優點: a.創建對象alloc浪費系統資源和時間 ,單例節省資源時間; b.多模塊訪問同一變量,單例中則訪問容易,數據保存共享,避免多模塊相互傳遞風險和復雜; c.唯一全局實例對象;

缺點: 單例模式使得對象變成了全局的,降低了每個單獨模塊的靈活性;

典型的系統單例

UIapplication(應用程序實例)NSNotificationCenter(消息中心)NSFileManager(文件管理)NSUserDefaults(系統單例)NSURLCache(請求緩存)NSHTTPCookieStorage(應用程序cookies池)

獲取APPDelegate

AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate;

單例舉例

+(MyUserInfo *)sharedInstance{ static MyUserInfo *userInfo = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken,^(void) { userInfo = [[self alloc] initialize]; }); return userInfo;}static HttpRequestManager *manager = nil;+(HttpRequestManager *)shareManager{ @synchronized(self){ if (manager == nil) { manager = [[HttpRequestManager alloc] init]; } } return manager;}

3、觀察者模式(通知和KVO-類間傳消息和值/解偶和)(對應MVC中 Model-Controller?Notification和kvo) <1>.KVC/KVO(鍵值編碼-批量復制/鍵值觀察) KVC主要用于批量賦值,有setValue:@"" forKey:@""valueForKey兩種方法分別對應setter和getter方法

Model *model = [[Model alloc]init];[model setValue:string forKey:key]; //key為model的屬性 string為賦值

給對象的屬性賦值時使用:

User* user = [[User alloc] init];[user setValue:@"張三" forKey:@"name"][user setValue:@"65" forKey:@"weight"];

如KVO的對象屬性值發生變化,就會通知做相應的操作:

[user addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:NULL];

變化后處理函數:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ …}

通知NSNotification(跨類傳消息和值,消息發送者和接收者完全不知道對?,完全解偶和;可以創建多個觀察者,消息具有?播性質,不需要時注意向通知中?注銷觀察者)

//發送通知[[NSNotificationCenter defaultCenter] postNotificationName:@"postData" object:saveImageArray];//接收通知[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(PostImage:) name:@"postData" object:nil];//接收通知實現方法-(void)PostImage:(NSNotification*) notification{ //接收到消息后實現內容}//移除通知中?[[NSNotificationCenter defaultCenter] removeObserver:self name:@"postData" object:nil];

通知實現原理/KVO實現原理 通知原理是接收端把接收函數注冊到通知中心數組中,發送端發送數據就直接調用之前接收端注冊函數,NSNotification是同步方式;KVO是對所關心的屬性對象添加觀察者,當屬性值發生變化時會得到通知,我們可以對變化做相應的處理。

4、代理模式(回調-多繼承-解偶和)(對應MVC中View-Controller ?Delegate或Datasource) <1>.協議:制訂協議,定義方法;誰遵守協議,誰實現方法; <2>.代理:往往結合協議,設置代理,代理調用協議方法;遵守代理,實現代理協議方法;相當于A類在B類的方法實現內容和返回值; <3>.步驟:

定義協議,設置方法;設置代理,代理調用協議方法;遵守協議,接受代理,代理實現協議方法;

.h文件中設置協議方法

#import <UIKit/UIKit.h>// 協議方法@protocol ReplyInputViewDelegate <NSObject>-(void)clickSenderReplyButton:(UIButton *)sender;@end// 設置代理@property (nonatomic,strong) id<ReplyInputViewDelegate>delegate;

.m中實現

-(void)clickSenderButton:(UIButton *)sender{ if (self.delegate &&[self.delegate respondsToSelector:@selector(clickSenderReplyButton:)]) { [self.delegate clickSenderReplyButton:sender]; }}

在控制器中藥遵循代理,并實現方法: 設置代理 實現協議方法

方法和協議方法區別(類和類之間,協議不是類卻相當于類) a.?法?般只能在?個類中實現,協議?法的優勢就在于此?法可以在任意類中實現后回調,協議?法實現相對整個類是獨?模塊,達到了解偶和;類中繼承?個類就具有這個類的?法可以重構,?不能在另外繼承就是單繼承;?通過協議就繼承了協議?法,相當于重構了?法,實現類似多繼 承; b.協議實現部分多繼承功能(遵守協議就相當于繼承了協議得?法),遵守協議后有@optional可選實現、@required必實現的?法,協議就是規范接?的;代理是?種設計模式,當?個類的某些功能??不去做,需要由任何類來實現;

5、簡單工廠模式 blocks(代替部分協議功能-接?-回調) blocks代替部分協議代理功能,使?簡單,不需要太多@protocol定義接?,主要實現接?,反向傳值,回調的代碼!

typedef NSString *(^loggerBolck)(NSString *) ;//定義//實現loggerBolck blocks = ^(NSString *str){ ... }; NSString *allstr = @"allstr";NSString *str = @"str";str = blocks(allstr); //調?NSString *(^loggerBolck)(NSString *) ;loggerbolck = ^(NSString *str){ ... };NSString *allstr = @"allstr";NSString *str = @"str";str = loggerbolck(allstr);NSString *(^loggerbolck)(NSString *)= ^(NSString *str){ ... };NSString *allstr = @"allstr";NSString *str = @"str";str = loggerbolck(allstr);

Block注意點

blocks在類中做屬性要?copy(?論arc和mrc) //保留blocks?命周期,copy不?retain,要注意release,否則就autorelease__weak typeof(self) weakSelf = self;//把??設置位弱引?//__weak TCPClient *weakSelf = self; blocks?調?self時要設成弱引?對象,避免循環引?;防?在block中?到self時把self對象retain, 造成內存泄露;typedef void(^SendMessage)(MessageObject*); //定義block__weak TCPClient *weakSelf = self; //self設置為弱引?//實現blocksSendMessage sendMessage = ^(MessageObject *messageObejct){ NSString *sendString = [NSString stringWithFormat:@"%@",[messageObejct convertToString]]; NSData *sendData = [sendString dataUsingEncoding:NSUTF8StringEncoding]; [weakSelf.socketClient writeData:sendData withTimeout:-1 tag:0]; [weakSelf.socketClient readDataWithTimeout:-1 tag:0];}; self.sendMessage (messageObject); //調?blocks

注:小白第一次寫,如有錯誤歡迎批評指正,一起成長。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 弥勒县| 玉树县| 苏尼特右旗| 西吉县| 南安市| 黑龙江省| 象山县| 崇阳县| 赤峰市| 房产| 华安县| 灵宝市| 广河县| 夏津县| 额敏县| 崇文区| 镇赉县| 繁峙县| 泽州县| 玛纳斯县| 田林县| 余姚市| 深州市| 云阳县| 平湖市| 沈丘县| 锡林浩特市| 灵山县| 肥西县| 文山县| 衢州市| 新昌县| 鹤壁市| 竹溪县| 防城港市| 刚察县| 庆云县| 全州县| 涞源县| 砚山县| 革吉县|