关于一些变量的使用

如何要声明一个可以被全局访问的的字符串常量👇

UIKIT_EXTERN NSString *const PYSearchPlaceholderText;
#define UIKIT_EXTERN         extern __attribute__((visibility ("default")))


</br>

const 用法解释

四种写法:
 1. static const NSString *HSCoder = @"汉斯哈哈哈"; // 指向的指针不能改变,static限制了不能被外部文件访问了
 2. const NSString *HSCoder = @"汉斯哈哈哈"; // 指向的内存地址的内容不能改变,但是可以改变指向的指针
 3. NSString const *HSCoder = @"汉斯哈哈哈";  // 指向的内存地址的内容不能改变,但是可以改变指向的指针
 4. NSString * const HSCoder = @"汉斯哈哈哈"; // // 指向的内存地址的内容不能改变(NSString本身就不能改变),指向的指针也不能改变。

注意:

  1. 以上4种情况,在另外一个文件中使用extern修饰变量,可以直接改变地址内存的内容。(不知道该怎么解决....才能使得在另外的文件中也不能修改)
  2. 局部常量:用static修饰后,不能提供外界访问

参考http://www.jianshu.com/p/f83335e036b5


</br>

static 用法解释


</br>

extern 用法解释

在源文件A里定义的变量,在其它源文件里是看不见的(即不能访问)。为了在源文件B里能调用这个函数,应该在B的头部加上一个外部声明: extern 变量; 这样,在源文件B里也可以调用那个变量了。

注意这里的用词区别:在A里是定义,在B里是声明。一个函数只能(也必须)在一个源文件里被定义,但是可以在其它多个源文件里被声明。定义引起存储分配,是真正产生那个实体。而声明并不引起存储分配。

打一个粗俗的比方:在源文件B里声明后,好比在B里开了一扇窗,让它可以看到A里的那个变量。

attribute 用法解释

attribute是GNU C的一种机制,用法为attribute_ ((attribute-list))。当项目需要作为一个库被外包引用的时候通常在编译时可以用参数-fvisibility指定所有符号的可见性。在编译命令中加入 -fvisibility=hidden参数,会将所有默认的public的属性变为hidden。此时,如果对函数设置attribute((visibility ("default")))参数,使特定的函数仍然按默认的public属性处理,则-fvisibility=hidden参数不会对该函数起作用。所以,设置了-fvisibility=hidden参数之后,只有设置了attribute((visibility ("default")))的函数才是对外可见的。


</br>

总结:如果需要让类或方法可以让库外被引用,就需要使用以上代码确保代码的可见性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容