随意记录一些在学习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之前需要检查并移除,这样就不会重复添加了。