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 <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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值