美文网首页首页投稿(暂停使用,暂停投稿)iOS Developer
iOS巩基系列(二)——const、static、extern

iOS巩基系列(二)——const、static、extern

作者: Claire_wu | 来源:发表于2017-09-13 15:22 被阅读123次

const

  1. const用来修饰右边的基本变量或指针变量
  2. 被修饰的变量只读,不能被修改
/** 可以改变指针的指向 但是不能改变指针指向的内容 不能改变值*/
NSString * const kHomeBottomTitle1 = @"kHomeBottomTitle1"; 

/** 可以改变指针指向的内容 但是不能改变指针的指向 值可变*/ 
const NSString * kHomeBottomTitle2 = @"kHomeBottomTitle2"; 

/** 指针的指向 指针指向的内容都不可改变 不能改变值*/
const NSString * const kHomeBottomTitle3 = @"kHomeBottomTitle3";

static

  1. 修饰局部变量
    在方法体内,声明为静态的变量(局部静态变量)。保证局部变量永远只初始化一次,在程序的运行过程中永远只有一份内存,生命周期类似全局变量了,但是作用域不变。
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{    
//声明一个局部变量i
static  int i = 0;    //每次点击view来到这个方法时让i自增
i ++;    //打印结果
NSLog(@"i=%d",i);
}
//i每次都会递增,因为只初始化一次
  1. 修饰全局变量
    在源文件内(但在方法体外),全局静态变量。变量的内存只被分配一次,使全局变量的作用域仅限于当前文件内部,即当前文件内部才能访问该全局变量。从面向对象的角度出发,当需要一个数据对象为整类而非某个对象服务,同时有力求不破坏类的封装性,既要求此成员隐藏在类的内部,又要求对外不可见的时候,就可以使用static。
@implementation LoginTool

//static修饰全局变量,让外界文件无法访问
static LoginTool *_sharedManager = nil;
+ (LoginTool *)sharedManager {
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_sharedManager = [[self alloc] init];
});
return _sharedManager;
}
  1. 修饰函数(很少用到)
    static修饰函数时,被修饰的函数被称为静态函数,使得外部文件无法访问这个函数,仅本文件可以访问。

extern

  1. 声明外部全局变量。这里需要特别注意extern只能声明,不能用于实现。
h中声明 
extern NSString * const  kHomeBottomTitle1;
.m中定义
NSString * const  kHomeBottomTitle1 = @"kHomeBottomTitle1";

注意:不可直接在.h文件中直接定义变量即:
extern NSString * const kHomeBottomTitle1 = @"kHomeBottomTitle1";
因为如果在.h里面定义,当全局变量被多个文件使用时,需要多次包含.h头文件,这样会导致重复定义这个全局变量

相关文章

网友评论

    本文标题:iOS巩基系列(二)——const、static、extern

    本文链接:https://www.haomeiwen.com/subject/lfzksxtx.html