1.
在 ARC 中,所有*outlet*属性都推荐使用 weak,这些 view 对象已经属于 View Controller 的 view hierarchy,不需要再次定义为 strong(ARC 中效果等同于 retain)。唯一应该使用 strong 的 outlet 是 File‘s Owner,连接到 nib 的顶 层对象。
因为 tableView 和 searchBar 这两个 property 定义为 weak,当它们指向的 对象被释放时,这两个变量会自动设置为 nil。
当 iOS App 接收到低内存警告时,View Controller 的 main view 会被 unload, 同时会释放所有 subview。这时 UITableView 和 UISearchBar 对象会自动释放, zeroing weak pointer system 就会自动设置 self.tableView 和 self.searchBar 为 nil。因此不需要在 viewDidUnload 中再次设置为 nil,实 际上当 viewDidUnload 被调用时,这两个属性已经是 nil 了。
这并不意味着你可以不需要 viewDidUnload,只要你保持一个对象的指针, 对象就会存活。当你不需要某个对象时,可以手动设置指针为 nil。如上面示例 代码中的 soundEffect = nil; viewDidUnload()方法里面需要设置所有非 outlet 变量为 nil,同样还有 didReceiveMemoryWarning()方法。
2.
property 的修饰符总结如下:
- strong:等同于"retain",属性成为对象的拥有者
- weak:属性是 weak pointer,当对象释放时会自动设置为 nil,记住 Outlet
应该使用 Weak
- unsafe_unretained:等同于之前的"assign",只有 iOS 4 才应该使用
- copy:和之前的 copy 一样,复制一个对象并创建 strong 关联
- assign:对象不能使用 assign,但原始类型(BOOL、int、float)仍然
可以使用
时间: 2024-10-05 05:01:52