隨意記錄一些在學習iOS編程或者swift的時候碰到的一些小知識點,記錄下來以備不時之需。
這部分主要是學習高仿小日子的時候的一些筆記
- NSBundle
NSBundle是一個繼承自NSObject的類,這個類的對象主要的作用是幫助你訪問硬盤上的捆綁包目錄里的代碼和資源(An NSBundle object helps you access the code and resources in a bundle directory on disk)。蘋果使用捆綁包來呈 現app,框架,插件和其他特定類型的內容。捆綁包將他包含的資源organise在定義的非常好的子目錄里,并且捆綁包的 結構根據不同的平臺或者捆綁包的類型不同。通過使用一個bundle類的對象,你可以在不清楚捆綁包結構的前提下訪問他 所包含的資源。考慮到捆綁包的結構,用戶特性,可用的定位以及其他的一些因素,bundle類的對象提供一個單一的接口 用來定位名目(items)。
當你需要定位資源的時候,不論是在一個app的捆綁包內還是在一個已知位置的捆綁包內,你都可以使用NSBundle
這個類的對象。在一個容器目錄里或者文件系統的其他部分,不用NSBundle
這個類的對象。
下面是使用這個類的對象的通用做法:
- 為想要用的捆綁包目錄創建一個這個類的對象。
- 使用它的方法來定位或者加載所需要的資源。
- 使用其他系統API來與這些資源交互。
最主要使用的一個方法:
+ mainBundle
:返回一個bundle對象,這個對象包含正在執行的內容。(一般也就是這個app所在的目錄)
swift
class func mainBundle() -> NSBundle
infoDictionary
Property
infoDictionary
這個屬性是從bundle的info.plist這個文件中創建的一個字典,這個字典包含接受者的一些信息。
A dictionary, constructed from the bundle's Info.plist file, that contains information about the receiver. (read-only)
- NSUserDefaults
- 屬性監視器willSet和didSet
- 屏幕分辨率
方便適配圖片,你需要知道這些東西
- NSNotificationCenter
如果想要了解iOS的消息通知機制,我覺得你可能需要學習下這篇文章,當然還有這篇和這篇也是不容錯過的。
- APPDelegate
APPDelegate是創建一個新工程后自動生成的,他主要完成的是對整個application的生命周期的管理的功能。
具體的講解如果你看了這篇文章,應該很清楚他在做什么。當然這篇文章也有些小補充可以看下。
- UITabbarController
最常見的創建UITabBarController的地方就是在APPDelegate中的 applicationDidFinishLaunching:
方法,因為UITabBarController通常是作為整個程序的rootViewController的,我們需要在程序的window顯示之前就創建好它。程序的rootViewController通常需要在APPDelegate中創建好,因為需要在window顯示之前就要準備好。這篇文章或許可以幫助你更好的理解它。
- UINavigationController
UINavigationController是IOS編程中比較常用的一種容器view controller。 看了這篇文章之后,你應該就會對它比較了解了。
- deinit
反初始化函數,你可能需要這篇文章。
- 類型屬性
- 單例
你應該閱讀這篇文章,來了解swift中的單例,也可以是這篇文章。
- UICollectionView和UICollectionViewLayout
- NSPredicate
- 正則表達式
正則表達式(regular expression)描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。看看這個,這篇文章教你怎么用正則表達式。這里還有一些很棒的tips。
- SVProgressHUD
一款輕量級的 iOS 第三方控件, 用于顯示任務加載時的動畫, 非常輕便, 容易使用.這幾篇文章挺好的。
這個,這個,還有這個.
- MD5 in swift
這里有文章
his is what I came up with. It's an extension to String. Don't forget to add #import <CommonCrypto/CommonCrypto.h>
to the ObjC-Swift bridging header that Xcode creates
extension String {
/// 返回字符串的 MD5 散列結果
var md5: String! {
let str = self.cStringUsingEncoding(NSUTF8StringEncoding) // 把string轉換成c-string的形式,使用特定的編碼方式
let strLen = CC_LONG(self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)) // Returns the number of bytes required to store the String in a given encoding.
let digestLen = Int(CC_MD5_DIGEST_LENGTH)
let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen) // Allocate memory for num objects of type Memory. 分配內存后用一個指針指向這個內存地址,內存大小跟前面的類型參數有關
CC_MD5(str!, strLen, result) // 給result進行md5散列
let hash = NSMutableString()
for i in 0..<digestLen {
hash.appendFormat("%02x", result[i]) // 把指針存儲到這個可變數組中
}
result.dealloc(digestLen) // 釋放指針指向的內存
return hash.copy() as! String // 返回這個可變數組
}
}
- NSSearchPathForDirectoriesInDomains
看下這篇文章吧
- UIActionSheet
UIActionSheet 可以彈出一個選擇列表,讓用戶選擇列表中的某一項操作。
關于actionSheet,建議看下唐巧的這篇博文
- clipsToBounds
決定了子視圖的顯示范圍。具體的說,就是當取值為YES時,剪裁超出父視圖范圍的子視圖部分;當取值為NO時,不剪裁子視圖。默認值為NO。
- UIBezierPath
- 搖一搖功能,相冊中選擇相片功能
這篇文章可以直接拿來用。
- 繪圖
先看看這篇文章有個大概的了解吧。
- NSFileManager 程序沙盒管理
- try?
- UIApplication
- NSNotification
一般來說,通知的添加與移除應該是成對出現的,在viewdidappear中add observe,在viewdiddisappear中remove,這樣就不會重復添加。但是,ios7之后添加了手勢,當通過手勢操作VC的時候,比如從屏幕左邊沿往右滑VC,但不要觸發pop出去,這時候viewdidappear會重復出現,但viewdiddisappear一次也不出現,會導致重復添加。所以正確的做法是在add observe之前需要檢查并移除,這樣就不會重復添加了。