//const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p)
static NSString *const keyA = @"keyA";
static NSString const *keyB = @"keyB";
static const NSString *keyC = @"keyC";
static const NSInteger numberA = 1;
static NSInteger const numberB = 1;
//keyA只读 keyB/keyC可变 numberA/numberB只读

extern的用法

我在ViewController.h中声明了一个全局变量TestA

#import <UIKit/UIKit.h>
//前面加不加extern都是一样的 因为默认是添加extern
NSString *const testA;
@interface ViewController : UIViewController
@end

在ViewController.m文件中赋值

#import "ViewController.h"
NSString * const testA = @"testA";
@interface ViewController ()
@end

然后如果我想在另外的文件中使用testA,例如在testViewController中。

只需要在testViewController中重新声明一下就可以了

#import <UIKit/UIKit.h>

extern NSString * const testA;

@interface TestViewController : UIViewController

@end

这里会有一个疑问,我见大多数三方库,比如MJRefresh中,虽然也这样声明了变量,但是用的时候还是导入了声明变量时的头文件。。。

比如在MJExtensionConst中声明了一堆只读全局变量,但是在MJPropertyType文件中使用的时候还是导入了MJExtensionconst.h文件。

那这样是不是就有点多此一举了呢,直接使用static修饰不就可以了吗,还是说我理解extern有误。

static/extern&const个人理解的更多相关文章

  1. 【语法】修饰符 static extern const

    转载自:http://my.oschina.net/u/2560887/blog/552683 一.C语言中的static的作用 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有 ...

  2. objectiveC【语法】修饰符 static extern const

    const const最好理解,修饰的东西不能被修改 指针类型根据位置的不同可以理解成3种情况: I 常量指针 // 初始化之后不能赋值,指向的对象可以是任意对象,对象可变. NSString * c ...

  3. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  4. 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)

    李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ...

  5. const,static,extern简介

    一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 编译时刻:宏是预编译(编译之前处理),const是编译阶段. 编 ...

  6. const,static,extern简介(重要)

    一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 编译时刻:宏是预编译(编译之前处理),const是编译 ...

  7. const ;static;extern的使用与作用

     const                                                                /**      const :常量      const  ...

  8. iOS正确使用const,static,extern

    static 修饰局部变量 让局部变量只初始化一次 局部变量在程序中只有一份内存 并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁) 修饰全局变量 全局变 ...

  9. const&static&extern

    const 结论: 如果const写在指针变量名的旁边, 那么指针的指向不能变, 而指向的内存空间的值可以变 如果const写在数据类型的左边或者右边, 那么指针的指向可以改变, 但是指向的内存空间的 ...

随机推荐

  1. LeetCode 相交链表&环形链表II

    题目链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/ 题目连接:https://leetcode-cn.com ...

  2. String、StringBuffer、StringBuilder有什么区别?

    1.在字符串不经常发生变化的业务场景优先使用String(代码更清晰简洁).如常量的声明,少量的字符串操作(拼接,删除等). 2.在单线程情况下,如有大量的字符串操作情况,应该使用StringBuil ...

  3. CSS3:FlexBox的详解

    Flexbox是Flexible box 的简称(灵活的盒子容器),是CSS3引入的新的布局模式.它决定了元素如何在页面上排列,使它们能在不同的屏幕尺寸和设备下可预测地展现出来. 它之所以被称为 Fl ...

  4. Size Assert

    判断返回内容的大小

  5. docker Dockerfile学习---构建apache环境

    1.创建目录,上传包 创建项目目录 $ mkdir apache_php $ cd apache_php 把包下载后放到服务器该目录下 $ ls apr-....tar.gz 2.创建Dockerfi ...

  6. linux 档案 指令(鸟哥私房菜)

    [ls -al] [ls -l --full-time] 显示文件完整的日期格式 [ls] 显示非隐藏档的文件信息 [ls -al] 显示所有文档信心.文档前面的 “”.“”表明该文档是隐藏档.eg. ...

  7. zmq利用protobuf通信

    protobuf序列化之后为二进制数据,数据中可能包含 ‘\0’,直接转换为char *类型会导致发送数据不完整.解决方法: void buildProtobufMsg(const string&am ...

  8. Ubuntu 18.04 切换使用Python3

    我安装的Ubuntu 默认的python是2.7.5 python -V 我参考网上照到的文章,如果需要默认python为 python3 python命令默认是 python 3 sudo cp / ...

  9. 【JZOJ6409】困难的图论

    description 给定由 n 个点 m 条边组成的无向连通图,保证没有重边和自环. 你需要找出所有边,满足这些边恰好存在于一个简单环中.一个环被称为简单环,当且仅当它包含的所有点都只在这个环中被 ...

  10. thinkphp 数据分页

    通常在数据查询后都会对数据集进行分页操作,ThinkPHP也提供了分页类来对数据分页提供支持. 下面是数据分页的两种示例. 第一种:利用Page类和limit方法 $User = M('User'); ...