iOS学习笔记3 - 命名空间
首先补充说明一下,这个系列不是教程,所以除了很可能会出错之外,而且不会按什么由浅入深的顺序来写。写什么主题完全看心情。
从C#转到Objective-c开发之后,会产生这么一个疑问:
Objective-C似乎没有命名空间?
没错。C++和C#有namespace,Java有Package(当然和Namespace有差别),我最近开始写的PHP也有如namespace com\example\johnslibrary\people;的命名空间,就连JavaScript。。。好吧让我们忘了JavaScript吧,它应该没有自带namespace(见http://elegantcode.com/2011/01/26/basic-javascript-part-8-namespaces/ 和 http://addyosmani.com/blog/essential-js-namespacing/)。
在开发C#的时候,经常会遇到不同NameSpace下有同样名字的类的情况。这时候就可以通过alias来区分。
比如
using n1=Namespace1; using n2=Namespace2;n1.ClassA=new n1.ClassA(); n2.ClassA=new n2.ClassA();
但Objective-C没有。
类似c,所有的东西都运行在同一个全局的命名空间里。
所以在建立Objective-c的应用的时候,会有文本框,供输入前缀(prefix)。
“NS”是内置的Cocoa的前缀,表示NextStep。这个前缀被苹果占了。NextStep与Mac OS的关系就不多说了。
但相比CompanyA.XXX.YYY这样的通常NameSpace命名,前缀很容易冲突。如果我开了家叫MoeSoft的公司,前缀说不定就和微软冲突了。
如果同时引用了MS前缀的MoeSoft和Microsoft的类库就很可能悲剧了。
在stackoverflow有提出这样的解决方法:
用NSBundle来加载其中一个framework,然后复制并重命名,接下来加载另一个namespace。
另外还有一个建议是用@compatibility_alias来“重命名”类。
详细的可以看:
http://stackoverflow.com/questions/178434/what-is-the-best-way-to-solve-an-objective-c-namespace-collision
但如果能避免这个问题的话,还是尽量避免。那成语怎么说来着?君子不立危墙之下。
所以除非是在写最简单的测试代码,不然还是最好给自己的应用起一个足够长足够独特的前缀。
转载于:https://www.cnblogs.com/galaxyyao/archive/2013/04/27/3047421.html
iOS学习笔记3 - 命名空间相关推荐
- OpenCV for Ios 学习笔记(4)-标记检测1
本文原始地址:OpenCV for Ios 学习笔记(4)-标记检测1 简单的标记经常是以白色块和黑色块构成的规则图形.因为我们预先知道这些因素,所以我们可以很容易检测标记. 如图: 首先,我们需要找 ...
- IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...
IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- iOS学习笔记-自己动手写RESideMenu
代码地址如下: http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars ...
- iOS学习笔记-地图MapKit入门
代码地址如下: http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错 ...
- iOS学习笔记-自定义过渡动画
代码地址如下: http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swi ...
- thinkphp学习笔记8—命名空间
原文:thinkphp学习笔记8-命名空间 新版本(3.2)中采用命名空间的方式定义和加载类库文件,解决多个模块之间的冲突问题,并实现了更加高效的自动加载机制. 需要给类库定义所在的命名空间,命名空间 ...
- IOS学习笔记07---C语言函数-scanf函数
2013/8/7 IOS学习笔记07---C语言函数-scanf函数 ------------------------------ qq交流群:创梦技术交流群:251572072 ...
- IOS学习笔记07---C语言函数-printf函数
IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...
最新文章
- saltstack-gdlwolf自学总结第二篇:salt常用帮助查找命令
- Linux-makefile
- c语言和其他高级语言一样也要经过编译,C语言和其他高级语言的最大的区别是什么?...
- CRM Fiori launchpad请求响应结果的字段分析
- 2020 CCPC网络赛 赛后感
- mysql sqlstate 08001_关于Toad连接DB2的sqlstate=08001错误
- 关于完全删除电脑上多余的tomcat服务器的解决办法
- Matplotlib 中文用户指南 4.2 基本的文本命令
- oracle linux hugepage,LInux下为什么配置HugePages及配置步骤
- UvaLive7362 Fare(欧拉函数)
- Xcode 自动对齐 插件
- ES6——变量的解构赋值
- 周鸿祎内部讲话:大公司要创新,就必须做小
- 【opencv】visualstudio实现opencvblobslib编译
- 使用sql server Management Studio(企业管理器)或查询分析器管理数据库
- WinForm登陆成功后跳转到主窗口
- vue 加headers_vue-resource headers如何动态地设置
- Entity Relation Fusion for Real-Time One-Stage Referring Expression Comprehension 2021
- 【转详解步进电机工作原理】
- 黑胶唱片的“另类”用途
热门文章
- oracle 替换全部空格
- ORACLE(Linux版本)实时同步数据到MYSQL(Linux版本)解决方案:OGG
- Android开发笔记(一百零三)地图与定位SDK
- Java系统中如何拆分同步和异步
- 解决Android 输入法InputMethodService 显示时让原Activity大小计算错误问题
- 阿里安全体系获国际顶会表彰,安全技术将有九大新趋势
- 强制性国家标准 对胎压监测传感器提出更高要求
- 火炬之光模型导出(Unity载入火炬之光的模型)
- 模块公有包中不能导入私有包的内容
- 交换机的 VTP sever 与 client设置