iOS面试题整理---关键字!!!

关键字整理

 static

  1.static全局变量与普通的全局变量有什么区别?

    全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。

  2.static局部变量和普通局部变量有什么区别?

    static关键字修饰局部变量时只被初始化一次,在程序中只有一份内存。static关键字可延长局部变量的生命周期,直到程序结束才销毁。

  3.static函数与普通函数有什么区别?

    static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。

    static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

 

const

当我们想全局共用一些数据时,可以用宏、变量、常量

宏:
    #define HSCoder @"汉斯哈哈哈"
变量:
    NSString *HSCoder = @"汉斯哈哈哈";
常量:
    四种写法:
    static const NSString *HSCoder = @"汉斯哈哈哈";
    const NSString *HSCoder = @"汉斯哈哈哈";
    NSString const *HSCoder = @"汉斯哈哈哈";
    NSString * const HSCoder = @"汉斯哈哈哈";

const修饰位置不同,代表什么?
1.const NSString *HSCoder = @"汉斯哈哈哈";
2.NSString const *HSCoder = @"汉斯哈哈哈";
3.NSString * const HSCoder = @"汉斯哈哈哈";

1.const NSString *HSCoder = @"汉斯哈哈哈";
"*HSCoder"不能被修改, "HSCoder"能被修改

2.NSString const *HSCoder = @"汉斯哈哈哈";
"*HSCoder"不能被修改, "HSCoder"能被修改

3.NSString * const HSCoder = @"汉斯哈哈哈";
"HSCoder"不能被修改,"*HSCoder"能被修改

注意:1和2其实没什么区别
结论:const右边的总不能被修改

思考:宏与常/变量的选择?

宏:只是在预处理器里进行文本替换,没有类型,不做任何类型检查,编译器可以对相同的字符串进行优化。只保存一份到 .rodata 段。甚至有相同后缀的字符串也可以优化,你可以用GCC 编译测试,"Hello world" 与 "world" 两个字符串,只存储前面一个。取的时候只需要给前面和中间的地址,如果是整形、浮点型会有多份拷贝,但这些数写在指令中。占的只是代码段而已,大量用宏会导致二进制文件变大

变量:共享一块内存空间,就算项目中N处用到,也不会分配N块内存空间,可以被修改,在编译阶段会执行类型检查

常量:共享一块内存空间,就算项目中N处用到,也不会分配N块内存空间,可以根据const修饰的位置设定能否修改,在编译阶段会执行类型检查

 

extern

这个单词翻译过来是“外面的、外部的”。顾名思义,它的作用是声明外部全局变量。这里需要特别注意extern只能声明,不能用于实现。

//在开发中,我们通常会单独抽一个类来管理一些全局的变量或常量,下面来看看逼格比较高的一种做法:

//我们可以在.h文件中extern声明一些全局的常量
//声明一些全局常量
extern NSString * const name;
extern NSInteger const count;
//然后在.m文件中去实现
//实现
NSString * const name = @"王五";
NSInteger const count = 3;

 

@dynamic和@synthesize

 

 

 

 

 

 

转载于:https://www.cnblogs.com/1-434/p/10488658.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值