iOS之extern关键字
iOS 和 Android,一对天生的欢喜冤家,虽然系统和API完全不同,但可以找到很多功能相通的地方,如Android的关键字final 与 iOS的const。相信接触过java都知道如何使用static关键字,比起动不动就new一个对象来说,静态变量/方法在某些地方的使用更具备优势。iOS 与 Android 的static用法是一样的吗?答案当然是否,两者虽然长相一致,但用法却不尽相同,感兴趣的朋友可以参考这篇文章。
那么Android static对应着iOS哪个关键字呢?答案就是:extern。下面就让我们来看看extern的用法。题外话:实现类变量的方法还有很多,如利用AppDelegate、自定义单例、NSUserDefault,但个人觉得还是不够简单。直接上代码:
1、新建一个空白工程,只修改ViewController.m文件(用于定义类变量)和AppDelegate.m文件(用于使用类变量),其他文件不动。
经过测试,可以在多处地方定义类变量,请参考上图注释。
2、接下来,使用extern关键字表示引入全局变量,自动匹配工程,找到与当前(extern + 类型 + 变量名) 匹配的 (类型 + 变量名),接下来就可以对这个全局变量进行取值赋值操作了。
下面来看一段代码:
// // NSSingletonFactory.h // 单例模式的简单使用 // // Created by apple on 15/9/28. // Copyright (c) 2015年 LiuXun. All rights reserved. // // 单例工厂类 #import #define SingleFactory [NSSingletonFactory shareFactory] #ifdef __cplusplus extern "C"{ #endif id SingleForClass(Class a); // 已在.m 中添加函数的函数声明 #ifdef _cplusplus } #endif @interface NSSingletonFactory : NSObject { NSMutableDictionary *data; } +(NSSingletonFactory *) shareFactory; -(id)shareInstanceFor:(Class) aclass; -(id) shareInstanceFor:(Class)aclass category:(NSString *)key; @end
可以发现有这么一句: extern "C"
如: extern "C" void fun(int a, int b);是为了告诉编译器:以C语言的方式编译和连接封装函数,而不是C++的。因为C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的"脾气"了(不同的编译器采用的方法不一样),为什么这么做呢,因为C++支持函数的重载。
部分参考:http://blog.csdn.net/u013074465/article/details/42738553
更多相关文章
- Android(安卓)多线程 \Looper 分享
- 五步搞定Android开发环境部署——非常详细的Android开发环境搭建
- Android中本地广播的实现
- Android(安卓)TTS学习――TTS初体验(下)
- android.database.sqlite.SQLiteConstraintException: error cod
- C语言的函数递归(下)
- ANDROID JNI的使用简介
- Android通信机制之Android架构(一)
- Android(安卓)学习笔记 Service (二) Remote Service Sample