本文主要是参考简书上其他文章,算是做了一个精简的摘要,目的有两个:1.方便自己以后查找翻阅,过滤掉自己已经熟知的或者比较浅显但是会占篇幅的知识,突出自己不擅长或者容易搞混、忘记的知识;2. 担心作者会删除或者私密文章,将来翻看起来不容易。附上作者文章地址,请移步
一、基础篇
- 关键字continute:延续,跳过本次循环。比如:下面这段代码中“continue后面的语句”这句话永远不会被打印。
int number = 10;
while (number > 0) {
printf("发射子弹 %i\n",number);
number --;
if (number %3 == 0) {
printf("休息一下\n");
continue; // 跳过本次循环,进行下一次循环
// 只要看到continue 那么后面的所有语句都不会执行,会执行再次去判断条件表达式
printf("continue后面的语句\n");
}
printf("还有很多复杂的操作\n");
}
局部变量
概念 : 局部变量就是定义在函数,代码块和函数形参列表中的变量,我们就称之为局部变量
作用范围: 从定义的那一行开始 一直知道遇到大括号结束或者遇到return为止
特点:
相同作用域范围内不能出现同名的局部变量
不同作用域欧范围内出 同名的局部变量,内部的局部变量会覆盖外部的局部变量
注意:
局部变量没有固定的初始化值,如果没有对局部变量进行初始化,那么局部变量中是一些随机的值,
所以在开发中 千万不要使用未初始化的局部变量
存储位置:
局部变量存储在栈中,当作用域结束 系统会自动释放栈中的局部变量
全局变量
概念 : 写在函数,代码块,形参列表外 的变量,我们就称之为 全局变量
作用范围 : 从定义的那一行开始 一直 直到文件末尾{暂时这样认为}
特点 :
全局变量 和 局部变量可以同名
如果存在和全局变量同名的局部变量, 那么局部变量会 覆盖 全局变量
注意:
全局变量 如果没有进行初始化, 那么系统默认 会将全局变量初始化为0
存储位置:
全局变量存储在静态区中,他会随着程序的启动而创建,随着程序的结束而结束
static
作用:当使用static 来修饰局部变量,那么会延长局部变量的声明周期,并且会更改局部变量存储的位置,将局部变量从栈转移到静态区中。 (静态区内中的东西,只有在程序结束之后才会释放该储存空间)
应用场景: 当某个方法的调用 频率非常高,而该方法中更有些变量的值是固定不变的 那么这个是会 就可以使用static来修饰该变量,让该变量只开辟一次存储空间 这样可以提高程序的效率和性能
外部(内部)全局变量(exetrn和static)
全局变量分为两种:
外部全局变量:可以被其他文件访问的全局变量,默认情况下所有的全局变量都是外部全局变量。
特点:
可以定义同名的外部全局变量;
多个同名的外部全局变量 指向 同一块存储空间。
内部全局变量: 只能被当前文件访问的全局变量,只要给全局变量加上 static 关键字 就是内部全局变量
特点:
也可以定义多个同名的内部全局变量;
多个同名的全局变量 如果不在同一个文件中,那么指向不同的存储空间。
“只要用static修改的全局变量就是内部全局变量,只能在当前文件中使用,这样就可以提高我们全局变量的安全性”
注意:
如果多个文件中存在同名的 内部全局变量,相互不影响
如果既有外部全局变量 也有内部全局变量, 那么会优先访问内部全局变量
extern:
用于声明一个外部全局变量
声明只需要在使用变量之前声明就可以了
static:
用于定义一个内部全局变量
声明和定义的区别:
声明不会开辟存储空间
定义会开辟存储空间
局部变量、全局变量和成员变量
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
// 写在类的声明的大括号中的变量,我们称之为 成员变量 (属性, 实例变量)
// 成员变量 只能通过 对象来访问
// 注意: 成员变量不能离开类, 离开类之后就 不是 成员变量 \
成员变量不能定义的同时进行初始化
// 存储: 堆 (当前对象对应的堆的存储空间中)
// 存储在堆中的数据, 不会被自动释放,只能程序员 手动释放
int age;
}
@end
@implementation Person
@end
// 写在函数和大括号外部的变量, 我们称之为 全局变量
// 作用域 : 从定义的那一行开始, 一直到文件末尾
// 局部变量 可以先定义 再 初始化, 也可以定义的 同时初始化
// 存储 : 静态区
// 程序一启动 就会分配存储空间, 知道程序结束才会释放
int a;
int b = 24;
int main(int argc, const char * argv[])
{
// 写在函数或者 代码块的变量, 我们称之为 局部变量
// 作用域 : 从定义的那一行开始, 一直遇到大括号或者 return
// 局部变量 可以 先定义 再初始化 , 也可以定义的同时初始化
// 存储 : 栈
// 存储在栈中的数据 有一个特点, 系统会自动给我们释放
int num;
{
int value;
}
return 0;
}
实例变量的修饰符
@public (公开的): [可以在本类、其他类]
可以在其他类中方法 被 public修饰的成员变量
也可以在本类中方法 被 boublic 修饰的成员变量
可以子类 在子类中 访问 父类中的 @public修饰的成员变量
@private (私有的): [不可以在其他类 不可以在子类 只能在本类]
不可以在其他类中访问 被 private修饰的成员变量
可以在本类中 访问被 private修饰的成员变量
不可以 在子类中 访问父类中 被private修饰的成员变量
@protected (受保护的): [不可以在其他类 可以在子类 只能在本类]
不可以 在其他类中访问 被 protected 修饰的成员变量
可以 在本类中访问 被protected修饰的成员变量
可以子类 在子类中 访问 父类中的 @protected修饰的成员变量
@package (包:可以在本类、其他类) :[相当于 访问当前的包]
介于 public 和 private之间的 如果是 其他包中访问 那么 就是private的 如果是 当前代码所在的包中 访问就是public的
注意:
默认情况下 所有的实例变量都是protected
实例变量修饰符作用域 : 从现在的位置开始, 一直知道下一个修饰法的出现
如果没有遇到下一个字节变量修饰符, 那么修饰后面所有的实例变长;