设为首页 收藏本站
查看: 893|回复: 0

[经验分享] [转]Mac OS X framework 解析

[复制链接]

尚未签到

发表于 2015-12-30 09:47:41 | 显示全部楼层 |阅读模式
  转载地址:http://hi.baidu.com/yonderbyron/item/9838b73472152e009cc65ec8

Mac OS X framework 解析

  1、framework是什么?
  framework是一个层级的目录结构,将一系列可共享的资源,比如动态共享库、nib文件、图形文件、本地化相关文件、头文件、以及相关引用文档,包装成一个包(package)。可供许多应用程序同时使用。系统在需要的时候载入他们,且只在内存中存在一个副本。
  framework的使用方式和一个单独文件一样,通过Core Foundation Bundle Service 或者 Cocoa NSBundle类访问。framework设计目的和动态共享库、静态共享库类似,但有更多的优点:
  >framework将相关但是分散的资源整合起来,易于装卸和定位。
  >framework可包含比库更丰富多样的资源类型
  >不同版本的framework可被包含在同一个framework里,有更好的后向兼容性
  >有且仅有一份framework的只读资源存在于memory中。
  注:framework可以只包含resources,也programmatic interface不是必须的。当然这中用法很少使用。
  Mac OS X 关键的几个framework:包含Carbon、Cocoa、Application Services、Core Services,组合成umbrella framework,将底层的framework和用户程序隔离开来。
  
  2、framework的文件结构
  
  
  A simple framework bundle
  MyFramework.framework/
  
  MyFramework  -> Versions/Current/MyFramework
  
  Resources    -> Versions/Current/Resources
  
  Versions/
  
  A/
  
  MyFramework
  
  Resources/
  
  English.lproj/
  
  InfoPlist.strings
  
  Info.plist
  
  Current  -> A
  
  
  A framework with multiple versions
  MyFramework.framework/
  
  MyFramework  -> Versions/Current/MyFramework
  
  Resources    -> Versions/Current/Resources
  
  Versions/
  
  A/
  
  MyFramework
  
  Resources/
  
  English.lproj/
  
  InfoPlist.strings
  
  Info.plist
  
  B/
  
  MyFramework
  
  Resources/
  
  English.lproj/
  
  InfoPlist.strings
  
  Info.plist
  
  Current  -> B
  
  
  
  A framework with additional resource types
  MyFramework.framework/
  
  Headers      -> Versions/Current/Headers
  
  MyFramework  -> Versions/Current/MyFramework
  
  Resources    -> Versions/Current/Resources
  
  Versions/
  
  A/
  
  Headers/
  
  MyHeader.h
  
  MyFramework
  
  Resources/
  
  English.lproj/
  
  Documentation
  
  InfoPlist.strings
  
  Info.plist
  
  B/
  
  Headers/
  
  MyHeader.h
  
  MyFramework
  
  Resources/
  
  English.lproj/
  
  Documentation
  
  InfoPlist.strings
  
  Info.plist
  
  Current  -> B
  
  
  
  Structure of the Core Services umbrella framework
  CoreServices.framework/
  
  CoreServices           -> Versions/Current/CoreServices
  
  CoreServices_debug     -> Versions/Current/CoreServices_debug
  
  CoreServices_profile   -> Versions/Current/CoreServices_profile
  
  Frameworks             -> Versions/Current/Frameworks
  
  Headers                -> Versions/Current/Headers
  
  Resources              -> Versions/Current/Resources
  
  Versions/
  
  A/
  
  CoreServices
  
  CoreServices_debug
  
  CoreServices_profile
  
  Frameworks/
  
  CarbonCore.framework
  
  CFNetwork.framework
  
  OSServices.framework
  
  SearchKit.framework
  
  WebServicesCore.framework
  
  Headers/
  
  Components.k.h
  
  CoreServices-gcc3.p
  
  CoreServices-gcc3.pp
  
  CoreServices.h
  
  CoreServices.p
  
  CoreServices.pp
  
  CoreServices.r
  
  Resources/
  
  Info-macos.plist
  
  version.plist
  
  Current             -> A
  
  
  
  3、framework and binding
  
  binding意指动态绑定Mach-O库(动态库)文件,动态共享库有几个优点:一、memory使用更有效率,二、更容易让开发者修正错误。
  
  关于动态共享库的symbol binding,不同于static linked shared library在编译链接期需要确定symbol是否存在,他是在运行期检查symbol的有效性。这个特点使得动态库存在“lazy linking”的行为:动态链接器自动加载和链接那些需要的模块,也即,一个模块是否链接取决于程序是否有引用这个模块的symbol。
  
  上述特点同样也影响framework code的组织:互相依赖和对应的code应该放在同一个module里,并且必须保证每一个symbol只能在一个library里出现一次。
  
  framework的安装位置也是一个需要考量的因素,注意以下几点:1)第三方的framework安装在/library/Frameworks。 2)一定不要安装在/system/Library/Frameworks。3) 模块搜索顺序:一、链接期指定的显示路径,二、/library/frameworks,三、/system/library/frameworks
  
  4、create a framework
  几点注意:编码时使用统一的前缀,以避免和其他framework的symbol冲突。决定是使用private framework还是普通的framework。决定那些code是可以提取做成framework。不要创建umbrella framework

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-158208-1-1.html 上篇帖子: mac os安装基本的install环境,命令行安装软件 下篇帖子: Mac OS X 系统目录结构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表