zoukankan      html  css  js  c++  java
  • 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

    但如果能避免这个问题的话,还是尽量避免。那成语怎么说来着?君子不立危墙之下。

    所以除非是在写最简单的测试代码,不然还是最好给自己的应用起一个足够长足够独特的前缀。

  • 相关阅读:
    python基础
    ubuntu下使用mutt+msmtp发送邮件
    VC :在对话框中的控件中绘图
    VC :在对话框中绘图
    服务器性能/压力测试工具http_load、webbench、ab、Siege使用教程
    Xampp – Open SSL – Don’t know how to get public key from this private key
    apache 添加下载文件头
    nginx配置反向代理
    nginx的反向代理缓存
    varnishcache使用
  • 原文地址:https://www.cnblogs.com/galaxyyao/p/3047421.html
Copyright © 2011-2022 走看看