把 /usr/include/libxml2 添加到 header search path
-
2019-02-20
Xcode项目添加libxml
Views: 27393 | No Comments -
2019-02-19
Mac defaults 存储路径
Views: 20568 | No Commentsnon-sandboxed:
~/Library/Preferences/com.example.myapp.plist
sandboxed:
~/Library/Containers/com.example.myapp/Data/Library/Preferences/com.example.myapp.plist
defaults 命令只能读取 sandboxed 的。
但是,Xcode 调试时运行的 app,defaults 存在哪个目录呢?我也不知道。
-
2019-02-16
苹果Cocoa框架中关于NSView和NSViewController的关系
Views: 22103 | No Comments开始接触苹果的 GUI 框架时,经常对 NSView/UIView 和NSViewControoler/UIViewController 的关系感到疑惑,因为包括 Windows 界面开发在内的很多GUI框架,都只有 View,而没有 ViewController 的概念。而且在很长一段时间的实际使用中,也经常感到 ViewController 是多余,特别是开发自定义 View,逻辑代码者写在 View 类中更方便。
虽说 View 和 ViewController 是 MVC中 的概念,但我想从内存管理的角度来说说为什么 ViewController 必须存在。假设在这样的场景,这一个用户界面,上面随机地生成不定数量的框,然后把我们的 subview 添加到其中一个框里面。因为这些框是随机生成的,所以某一个代码框的对象可能在生成之后又被销毁了。如果这个框对象(也即 subview 的父节点)在被销毁时,也把 subview 销毁,那就不符合预期了。同时,也不能在销毁框之前把 subview 从框中移除,因为从代码逻辑上这样的实现并不优雅,而且违反很多代码的逻辑。
所以,subview 的内存应该次给父节点之外的其它对象管理,自然而然地想到给 subview 创建一个 ViewController,逻辑上表示 View 属于 ViewController,由后者管理其内存,这样逻辑上比较通。不然只能交给业务代码管理,这样逻辑上不太合理。
同时,允许存在不属于任何一个 ViewController 的独立的 View,实践上需要这种规则,例如我们动态地给某个父节点添加子节点,并且希望在销毁父节点时自动销毁子节点,因为这样代码更简洁。
所以,有两个动机:
1. 希望有些情况下销毁父节点时,不自动销毁子节点。
2. 希望有些情况下销毁父节点时,自动销毁子节点。解决方案是 ViewController 和引用计数。
这是 GUI 框架设计的一种思路。
-
2019-02-15
Mac 修改登录界面的语言
Views: 8970 | No Comments新的 MacBook Pro 系统选择语言或者地区为中文/中国之后,即使我的常用账号选的是英文,登录界面显示的还是中文,而且,重启电脑时,系统提示的也是中文。
如果要修改,只能通过命令行,在 System Preferences 里无法修改。命令:
sudo languagesetup
-
2019-02-13
Xcode修改编译输出的目录
Views: 10876 | No Comments如果你修改项目自己的 Build Settings 里的 Build Products Path,这没用,因为编译输出的路径是 Xcode 的配置,不是项目的配置,所以你应该修改 Xcode 的偏好设置。
1. 修改 Xcode 全局设置
在 Preferences -> Location -> DerivedData 选择 Custom,然后按 Advanced 按钮。Build Location 将 Custom 选为 Relative to Workspace。
2. 修改项目设置
如果你只想改某个项目,则从 File -> Project Settings 里改。
但是,无论你用哪一种方法,这个修改是不能放到项目的 git 代码库里的。这意味着,如果你换了台电脑,你还得重新设置一遍!
-
2019-02-12
Mac关闭系统更新提示
Views: 10777 | 2 Commentsdefaults write com.apple.systempreferences AttentionPrefBundleIDs 0 sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate.plist LastUpdatesAvailable 0 sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate.plist LastRecommendedUpdatesAvailable 0 sudo defaults delete /Library/Preferences/com.apple.SoftwareUpdate.plist RecommendedUpdates killall Dock