首先补充说明一下,这个系列不是教程,所以除了很可能会出错之外,而且不会按什么由浅入深的顺序来写。写什么主题完全看心情。

从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 - 命名空间相关推荐

  1. OpenCV for Ios 学习笔记(4)-标记检测1

    本文原始地址:OpenCV for Ios 学习笔记(4)-标记检测1 简单的标记经常是以白色块和黑色块构成的规则图形.因为我们预先知道这些因素,所以我们可以很容易检测标记. 如图: 首先,我们需要找 ...

  2. IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...

    IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...

  3. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  4. iOS学习笔记-自己动手写RESideMenu

    代码地址如下: http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars ...

  5. iOS学习笔记-地图MapKit入门

    代码地址如下: http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错 ...

  6. iOS学习笔记-自定义过渡动画

    代码地址如下: http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swi ...

  7. thinkphp学习笔记8—命名空间

    原文:thinkphp学习笔记8-命名空间 新版本(3.2)中采用命名空间的方式定义和加载类库文件,解决多个模块之间的冲突问题,并实现了更加高效的自动加载机制. 需要给类库定义所在的命名空间,命名空间 ...

  8. IOS学习笔记07---C语言函数-scanf函数

    2013/8/7 IOS学习笔记07---C语言函数-scanf函数 ------------------------------ qq交流群:创梦技术交流群:251572072            ...

  9. IOS学习笔记07---C语言函数-printf函数

    IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...

最新文章

  1. saltstack-gdlwolf自学总结第二篇:salt常用帮助查找命令
  2. Linux-makefile
  3. c语言和其他高级语言一样也要经过编译,C语言和其他高级语言的最大的区别是什么?...
  4. CRM Fiori launchpad请求响应结果的字段分析
  5. 2020 CCPC网络赛 赛后感
  6. mysql sqlstate 08001_关于Toad连接DB2的sqlstate=08001错误
  7. 关于完全删除电脑上多余的tomcat服务器的解决办法
  8. Matplotlib 中文用户指南 4.2 基本的文本命令
  9. oracle linux hugepage,LInux下为什么配置HugePages及配置步骤
  10. UvaLive7362 Fare(欧拉函数)
  11. Xcode 自动对齐 插件
  12. ES6——变量的解构赋值
  13. 周鸿祎内部讲话:大公司要创新,就必须做小
  14. 【opencv】visualstudio实现opencvblobslib编译
  15. 使用sql server Management Studio(企业管理器)或查询分析器管理数据库
  16. WinForm登陆成功后跳转到主窗口
  17. vue 加headers_vue-resource headers如何动态地设置
  18. Entity Relation Fusion for Real-Time One-Stage Referring Expression Comprehension 2021
  19. 【转详解步进电机工作原理】
  20. 黑胶唱片的“另类”用途

热门文章

  1. oracle 替换全部空格
  2. ORACLE(Linux版本)实时同步数据到MYSQL(Linux版本)解决方案:OGG
  3. Android开发笔记(一百零三)地图与定位SDK
  4. Java系统中如何拆分同步和异步
  5. 解决Android 输入法InputMethodService 显示时让原Activity大小计算错误问题
  6. 阿里安全体系获国际顶会表彰,安全技术将有九大新趋势
  7. 强制性国家标准 对胎压监测传感器提出更高要求
  8. 火炬之光模型导出(Unity载入火炬之光的模型)
  9. 模块公有包中不能导入私有包的内容
  10. 交换机的 VTP sever 与 client设置