iOS之extern关键字

来源:互联网 发布:matlab矩阵公式 编辑:程序博客网 时间:2024/06/15 19:33

     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 <Foundation/Foundation.h>  #define SingleFactory [NSSingletonFactory shareFactory]    #ifdef __cplusplus  extern "C"{  #endif      id SingleForClass(Class a);  // 已在.m 中添加函数的函数声明  #ifdef _cplusplus  }  #endif    @interface NSSingletonFactory : NSObject <NSCopying>  {      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

原创粉丝点击