iOS開發Tips收集-2015年12月
這些小Tips為本人近期讀書筆記,收集來自網絡開發者發布的技術文檔,并非原創,共享的目的是為了擴散分享技術,共同進步。 如有侵權不得轉載等情況,請聯系我告知 ,謝謝!
- 所謂閉包,就是函數及其詞法作用域的合稱
- 什么不是重構?:
- 添加新功能
- 改變某個類型的公共接口
- 改變某個類型的行為
這些東西都只能叫做重寫。有一個很簡單的判斷方式: 你是否需要改變單元測試 ?如果需要的話,那么只就是重寫,否則的話才是重構。
- 設置UIView的背景圖片
- 將圖片作為UIView的背景色,會在生成color時占用大量的內存。如果圖片大小不夠,就會平鋪多張圖片,不會去拉伸圖片以適應View的大小
- 在UIView上再添加一個UIImageView顯示圖片作為UIView的背景圖片
-
iOS視圖都是一個圖層,最先放置的圖層就會在最底層,如此最先給UIView添加一個UIImageView就可以作為UIView的背景圖片使用
- 其他方式(推薦)
NSStringpath = [[NSBundlemainBundle]pathForResource:@”image”ofType:@”jpg”];
image = [UIImageimageWithContentsOfFile:path];self.view.layer.contents = (id)image.CGImage;
- 代理,又稱委托代理(delegate),是iOS中常用的設計一種模式。顧名思義,它是把某個對象要做的事情委托給別的對象去做。那么別的對象就是這個對象的代理,代替它來打理要做的事。反映到程序中, 首先要明確一個對象的委托方是哪個對象,委托所做的內容是什么。在iOS程序設計中,委托通過一種@protocol的方式實現,所以又稱為協議。在iOS的SDK里面,UITableView、UITextField等都有用到這種設計模式。
- 協議,是多個類共享的一個方法列表,在協議中所列出的方法沒有響應的實現,由其它類來實現。委托是指給一個對象提供機會對另一對象中的變化做出反應或者相應另一個對象的行為。其基本思想是協同解決問題。
- 委托模式能夠起到兩方面的作用:
- 代理協助對象主體完成某項操作,將需要定制化的操作通過代理來自定義實現,達到和子類化對象主體同樣的作用。
- 事件監聽,代理對象監聽對象主體的某些重要事件,對事件做出具體響應或廣播事件交給需要作出響應的對象。
- NSString是不可變的,意思是他聲明的對象我們不可以改變,如果要改變,可以使用它的子類:NSMutableString
- 高階函數,指可以將其他函數作為參數或者返回結果的函數。Swift中的函數都是高階函數
- 對象是附有行為的數據,而閉包是附有數據的行為。
- 推測蘋果審核團隊設備驗收選型也會遵循原則:驗收最新發布的兩個系統版本,兩個硬件版本。保證游戲可以在市場占有率最高的兩個系統版本及硬件配置上可以流暢運行。
- 預審組通過細分將預審工作劃為3大模塊:客戶端資源檢查、應用內容檢查和提審資源檢查:
- 客戶端資源檢查:確保客戶端內Plist等配置符合蘋果要求,不存在多余的Key值enable;
- 應用內容檢查:對應用的內容進行審查,確認無涉及色情、庸俗、暴力、槍支等內容;并對公告文字等篩查,無蘋果禁止的字眼等;應用內不包含cdkey兌換,好友邀請及炫耀等蘋果最新禁止的內容;
- 提審資源檢查:確保提交的游戲截圖、視頻符合蘋果要求,且截圖及視頻中沒有敏感信息;同時視頻截圖等均符合蘋果的技術要求,幀率分辨率達標.
- 模塊化編程才是正道,盡量使用 struct 和 enum 代替 class,把 extension 和 protocol 當做膠水,把邏輯和行為分開,總結起來就是珍愛POP/VOP,遠離OOP
- 為了便于客戶端使用數據,逐漸形成了一種非正式傳輸協議,人們把它稱作JSONP,該協議的一個要點就是允許用戶傳遞一個callback參數給服務端,然后服務端返回數據時會將這個callback參數作為函數名來包裹住JSON數據,這樣客戶端就可以隨意定制自己的函數來自動處理返回數據了。
- IOS字號轉換:
pt=(px/96)*72
1 in = 2.54 cm = 25.4 mm = 72pt
px(Pixel):像素,相對長度單位。
pt(Point):點,絕對長度單位。 - 系統的這些視圖控制器,都實現了CALayer的delegate,當vc的根視圖的frame發生變化的時候會接受到通知 layoutSublayersOfLayer ,系統的視圖控制器會在這里面調用這兩個函數來通知其當前的子VC去做布局的工作:
- viewWillLayoutSubviews
- viewDidLayoutSubviews
- 工程Info中:
- CFBundleVersion,標識(發布或未發布)的內部版本號。這是一個單調增加的字符串,包括一個或多個時期分隔的整數。
- CFBundleShortVersionString標識應用程序的發布版本號。該版本的版本號是三個時期分隔的整數組成的字符串。第一個整數代表重大修改的版本,如實現新的功能或重大變化的修訂。第二個整數表示的修訂,實現較突出的特點。第三個整數代表維護版本。該鍵的值不同于“CFBundleVersion”標識。
- Version 對應的就是CFBundleShortVersionString (發布版本號 如當前上架版本為1.1.0 之后你更新的時候可以改為1.1.1)。
- Build 對應的是 CFBundleVersion(內部標示,用以記錄開發版本的,每次更新的時候都需要比上一次高 如:當前版本是11,下一次就要大于11 比如 12,13 ….10000)
- iOS app icon 通用設計規則:
- 如果品牌 LOGO 在「顏色」上的展示訴求大于「造型」的話,可用白色背景加品牌 LOGO;
- 如果品牌 LOGO 「造型」足夠獨特具有高識別度,或對「顏色」訴求相對較小的話,則可用品牌色做背景;
- 如果產品擁有具象的形象物或場景的話,可設計「擬物化」或「 場景化」的圖標(游戲圖標居多)。
- 如果品牌 LOGO 在「顏色」上的展示訴求大于「造型」的話,可用白色背景加品牌 LOGO;
- 當用戶點擊屏幕后,首先開啟的是查找hit-View的過程。從window開始,給所有直接子視圖發hit-Test的消息,直到某一個控件沒有子視圖了,并且這個觸點在這個子視圖中,則返回這個控件,于是hit-View找到了。找到hit-View后,view則成為了需要第一個為這個事件提供響應的對象,如果,該對象沒有提供事件響應,則該事件對象會向視圖的父視圖繼續傳遞,如果父視圖依然沒有提供響應,則繼續向上傳遞,直到傳遞到UIApplication對象,依然沒有處理的話,則拋棄該事件。這個過程叫做響應者鏈。
- Swift 2.1 現在可以在字符串插值中使用雙引號。表達式字符串插值現在可以包含字符串了。比如, “My name is \ (attributes[“name”]!)” 現在是有效的。
- 通過NSURLConnection主要通過四個類進行網絡訪問:NSURL,NSURLRequest,NSMutableURLRequest,NSURLConnection
- NSURL:請求地址
- NSURLRequest:封裝一個請求,保存發給服務器的全部數據,包括一個NSURL對象,請求方法、請求頭、請求體….
- NSMutableURLRequest:NSURLRequest的子類
- NSURLConnection:負責發送請求,建立客戶端和服務器的連接。發送NSURLRequest的數據給服務器,并收集來自服務器的響應數據
- 縮放的一般實現步驟 (比如縮放UIScrollView內部的UIImageView)
- 設置UIScrollView的delegate為控制器 (self)
- 控制器遵守UIScrollViewDelegate協議 \
- 控制器實現viewForZoomingInScrollView:方法, 返回需要縮放的子控件
- 設置最大和最小縮放比例
- 添加視圖代碼幾個建議:
- 避免調用 layoutSubviews,在 viewDidLayoutSubviews 和 viewDidAppear 中進行 frame 的獲取
- 如果你需要盡早地做一些大動作,推薦在 viewDidLayoutSubviews,此時用戶還沒有看到 UI,用法可以更靈活
- 注意 viewDidLayoutSubviews 可能會被多次調用,所以添加元素之類的操作盡量避免在這里做
- viewDidAppear 中可以干一切你想干的事情,但是一些需要用戶看到的東西例如動畫只能在這里做
- 更推薦把需要做的事情盡量全部放到 viewDidAppear 中來做,讓用戶盡早地看到界面,這是人機交互的基本原則
- 對view的layer的修改是發生在約束調整之前的如果layer和約束存在關聯的話就需要好好調試了
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!