- Foundation.h
(1)我们称之为主头文件, 主头文件中又拷贝了该工具箱中所有工具的头文件, 我们只需要导入主头文件就可以使用该工具箱中所有的工具, 避免了每次使用都要导入一个对应的头文件
(2)工具箱的地址: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks
(3)规律: 所有的主头文件的名称都和工具箱的名称一致
所有的主头文件都是导入了该工具箱中所有工具的头文件
- import与include
(1)import的功能和include一样, 是将右边的文件拷贝到当前import的位置
为了降低程序员的负担, 防止重复导入, 避免程序员去书写头文件卫士, OC给出来一个新的预处理指令import
(2)import优点: 会自动防止重复拷贝
(3)因为OC完全兼容C, 所以可以在OC程序中编写C语言代码
并且可以将C语言的源文件和OC的源文件组合在一起生成可执行文件
- printf和NSLog的区别
(1)NSLog会自动换行
(2)NSLog在输出内容时会附加一些系统信息
(3)NSLog和printf接收的参数不一样
- 函数与方法
C语言函数:
void about(); //声明
void about() //实现
{
printf("model = cpu = size = color");
}
OC方法:
- (void)about; //声明
@implementation IPhone //实现
- (void)about
{
NSLog(@"打印本机信息");
}
@end
(1)C语言中函数分为声明和实现
OC中定义一个类也分为声明和实现, 也就是说以后我们在OC中定义类, 就是在写类的声明和实现
(2)OC中的行为和C语言中的函数一样, 都是用来保存一段特定功能的代码
C语言中定义一个函数, 分为声明和实现, 声明写在.h中, 实现写在.c中
OC中定义一个方法, 也分为声明和实现, 声明写在@interface中, 实现写在@implementation
(3)C语言的函数分为两种: 内部函数和外部函数
OC中的方法也分为两种; 类方法和对象方法
(4)类方法只能用类名调用, 对象方法只能用对象调用
OC中的类方法用+表示, OC中的对象方法用-表示
(5)编写C语言函数的规律: 1.确定函数名称 2.确定形参 3.确定返回值 4.确定返回值类型
编写OC方法也有规律, 规律和C语言一模一样
(6)注意: OC中的方法, 如果没有形参不需要写(), 而是直接写一个;
为什么OC中没有形参不需要写()呢?
因为OC方法中的()有特殊的用途, OC方法中的()是用来扩住数据类型的
(7)方法和函数的声明
C语言函数:
int signal(int number);
OC语言方法:
- (int)signal:(int)number;
注意: OC中的方法如果有参数, 那么每个参数的数据类型前面必须加上一个:
注意: 当前这个有参数的方法它的方法名称是 signal:
冒号也是方法名称的一部分
有返回值并且有多个参数的:
C语言函数:
int sendMessage(int number, char *content);
OC语言方法:
(int)sendMessage:(int)number :(char *)content;
注意: 上面这个方法的方法名称是sendMessage::
(8)1 函数属于整个文件, 方法属于某一个类
方法如果离开类就不行
2 函数可以直接调用, 方法必须用对象或者类来调用
注意: 虽然函数属于整个文件, 但是如果把函数写在类的声明中会不识别
3 不能把函数当做方法来调用, 也不能把方法当做函数来调用
(9)方法的注意点:
1 方法可以没有声明只有实现
2 方法可以只有声明没有实现, 编译不会报错, 但是运行会报错
3 如果方法只有声明没有实现, 那么运行时会报:
reason: '+[Person demo]: unrecognized selector sent to class 0x100001140'
//发送了一个不能识别的消息, 在Person类中没有+开头的demo方法
reason: '-[Person test]: unrecognized selector sent to instance 0x100400000'