我正在学习OC,跟大家分享一下我的学习历程,希望对以后学OC的同学们有点帮助,写得不好的地方希望大家不要介意,可以给我指出来,也可以给提些意见。
1.函数
1.定义函数
函数的返回类型 函数名 (行参列表)
{
//多条可执行的语句
}
*返回值为Objective-C允许的任何数据类型,包含基本类型和指针类型。如果没有返回值,则必须用void来声明,否则系统默认为int。
*函数名只要是个合法的标识符就好。但在OC中,最好是有一个或多个有意义的单词连接而成,第一个单词首字母小写,后面每个单词首字母大写,其他字母全部小写,单词与单词之间无需使用任何分隔符
*行参列表用于定义该函数可以接受的参数,行参列表由零组到多组“参数类型 行参名”组合而成,多组参数之间以英文逗号(,)隔开,行参类型和行参名之间用空格隔开。在定义函数是一旦制定了行参列表,则调用该函数是必须传入对应的参数值——谁调用函数,谁负责为行参赋值。
2.函数声明
如果被调用的函数位于后面,,或函数定义在另一个源文件中,此时就可以通过函数声明来指定该函数的行参列表和返回值类型。
函数声明有两种形式:
*只声明函数的返回值类型、函数名、行参列表的行参类型,不保留行参名。
*声明函数的返回值类型、函数名、完整的行参列表,包括行参名。
3.递归
一个函数自己体内调用它自身时,被称为函数的递归。
*当一个函数不断调用它自身时,在某个时刻的返回值必须是确定的,既不在调用它本身。否则这种递归就变成了无穷递归,类似于死循环。因此定义递归函数时有一条最重要的规定:递归一定要向已知方向递归。
2.局部变量与全局变量
在函数内部定义的变量就是局部变量,局部变量只在该函数内部有效,只在该函数内部才能使用它们,在函数外部无法访问这些变量。定义在函数外部的变量是全局变量,全局变量可以被该源文件中的所有函数访问,它的作用域为:从定义该变量的位置开始,到该源文件结束。
C语言并不强制对局部变量赋初始值,但在给它们赋初始值之前,它们的值是不确定的
在一个函数内部,如果全局变量和局部变量同名,局部变量将会覆盖全局变量,这意味着在该函数内部,全局变量将会失效。
3.预处理
预处理命令有两个特征
*都必须以#开头
*预处理命令通常位于程序开头部分
#define的作用就是为字符串起个名字,例如 #define PI 3.1415926 使用 PI 代替了3.1415926
还可以在宏定义中使用参数。 例如,在上面的宏定义后再加上 #define GIRTH(r) PI * 2 * r.
#include 和 #import 的区别:
#import更加好用
使用#include需要程序员自行判断是否存在重复导入的情况,如果开发者的#include指令导致了重复导入,它不会给出提示。
#import更加智能:大部分时候,#import的功能与#include功能相似,但#import可以帮程序员判断,避免重复导入的问题
如果导入用户自定义的源文件,再#import后使用双引号来包含源文件的文件名;如果要导入系统的源文件,则在#import后使用<和>来包含源文件的文件名
4.指针
指针的知识太多,在C语言中,最重要的就是指针这里的内容,所以要在C语言中好好学习指针,这里就不说了
5.结构体
1. 定义结构体
定义结构体类型
语法格式:
struct 结构体类型名
{
//成员列表
};
然后定义结构体变量
语法格式: struct 结构体名 变量名;
2. typedef语句
可以用typedef为已有的数据类型另起一个名字。例如:typedef int Counter ; int 类型就有了一个新名字:Counter。
6.块
1.块的基本语法
定义块的语法格式如下:
^[块返回值类型] (行参类型1 行参1, 行参类型2 行参2, ...)
{
//块执行体
}
* 定义块必须“ ^ ”开头
* 定义块的返回值类型可以省略,而且经常都会省略声明块的返回值类型
* 定义块无须指定名字
* 如果块没有返回值,块无须带参数,通常建议使用void作为占位符。
变量的语法格式:
块返回值类型( ^块变量名)(行参类型1, 参类型2, ...);
定义块变量时,无须声明行参名,只要指定行参类型即可。类似的,如果该块不需要行参,则建议使用void作为占位符。
下面的程序将会示范有参数和无参数两种块的定义和调用
2.块与局部变量
块可以访问程序中局部变量的值,当块访问局部变量的值时,不允许修改局部变量的值。
3.直接使用块作为参数
当把块作为方法参数时,无须定义块变量,直接把块作为参数传给制定的方法即可。需要指出的是,块只能作为方法的最后一个参数。
4.使用typedef定义块变量类型
使用typedef可以定义块变量类型,一旦定义了块变量类型,该块变量主要有如下两个用途
*复用块变量类型,使用块变量类型可以重复定义多个块变量
*使用块变量类型定义函数参数,这样即可定义带块参数的函数
语法格式如下:
typedef 块返回值类型 (^块变量类型)(行参类型1, 行参类型, ...);
下面的程序将会示范先定义块变量类型,再使用该类型重复定义多个变量。
程序还可以使用该块变量类型定义更多的块变量——只要块变量的行参、返回值类型与此处定义的相同。
利用typedef定义的块变量类型即可为函数声明块变量类型的行参,这要求调用函数是必须传入块变量。