1. 头文件:
#import<Foundation/Foundation.h>,告诉编译器找到并处理名为Foundation.h这是一个系统文件#import表示将文件信息导入到程序中,可以防止头文件重复包含
#include <stdio.h>,include使用预处理防止重复包含,没写预处理指令,则无法防止重复包含
@class 类名;告诉编译器,此类是一个类名,编译时不进行检查
int mian(int argc,const char *argv[ ]),这是一个程序入口,参数argc- 参数数目,argv-参数值
2. NSlog 的使用:
NSLog是Foundation框架提供的日志输出函数,与标准的C中的prinrf函数类型并可以格式化输出。
NSLog(@"%@",类对象);
NSLog和printf 的区别
NSLog 参数是NSString的对象,printf是一个字符串常量指针
NSLog 输出时间日子、项目信息。printf只输出要程序结果
NSLog 可以自动换行,printf 学要加上\n才能换行
不能使用printf打印OC中的对象
3. OC中注释和@的使用
@“”表示讲一个字符换转化为OC的字符串对象NSString
@标识符 OC中大部分的关键字都是以@开头
%@是OC中特有的
单行注释://
多行注释:/* */
文档注释:/**
*/编译时不对注释做任何处理
4. OC 与C 语言的差异:
C中:有.c .o .out
OC 中有.h(头文件,包含方法,属性的声明) .m(类的实现文件) .c(语言源文件) .o
.OC中特有的数据类型:
逻辑型BOOLean 用于存储指针和假值的变量。一般用于程序流程控制
取值::true false
BOOL 取值::YES NO 或 0 1
OC中新增for循环,可以快速遍历数组、字典等集合
5. 类的声明和实现:
类:一类事物有共同特性和行为的抽象;
对象:类的实例化的个体事物;
类的定义分为两部分:
类的声明(规定当前类的:类名、属性、行为),具体格式为:
@interface 类名:父类名
{
// 定义类的属性;
}
// 类的行为
@end
类的实现(实现具体实现)
@implementation 类名
// 行为的具体实现
@end
类的四大特性::抽象性 封装性 多态性 继承性
6.面向对象和面向过程的区别:
面向对象: 强调功能对象 做什么事需要那些对象
面向对象是基于面向过程
面向过程: 强调功能行为 做什么事需要哪些步骤
[对象 new]; 一共做了三件事;
向计算机申请内存空间;
给类中的每一个成员初始化值;
返回新申请空间的首地址;
1) new的时候,申请的存储空间在内存的堆栈区:
如果实例变量是基本数据类型,此时给初始化为0;
如果实例变量是OC的字符串类型,此时初始化的是NULL;
2)实例变量保存在:堆区; P指针变量保存在栈区;对象方法保存在了代码区;
格式为: int *p = [ Car new]; 可理解为 定义了一个car类型的指针变量;指针变量指向新申请的内存空间。或者:用 Car类 实例化了一个实例对象,对象的名字是P;
通过对象->对象成员(声明属性为:@public)的方式操作对象中的成员。
8.对象方法和类方法:
对象方法:
对象方法以-开头
对象方法只能由对象来调用
对象方法中可以访问对象中的成员变量
对象方式:调用格式:[对象名 对象方法];
类方法:
类方法以+开头
类方法只能由类来调用
类方法中不能访问成员变量
调用格式:[类名 类方法];
优点:不依赖对象执行效率高
能用类方法解决问题,尽量使用类方法
9. #pragma mark 预处理指令的使用。
功能:简单来说,就是对代码的分组,方便代码的查找和导航;
格式为:#pregma mark +要定位的名称;
10 函数和对象方法的区别。
对象方法::
对象方法只能实现在@implementation
对象方法以-开头 类都以+开头
对象方法只能由对象调用,类方法中只能由类来调用,不能当做函数来调用
函数属于整个文件中,可以写在文件中的任何位置
对象方法归类和对象所用
函数:
所用的函数是平行的
函数不存在隶属关系
使用的时候可以直接使用
不可以访问对象中的成员变量
11对象的存储细节
类创建对象,每个对象在内存中都占据一定的内存空间,每个对象都有一份属于自己的单独的成员变量。
方法在整个内存中只用一份,类本身在内存中占据一份存储空间
每个对象都包含一个isa指针,这个指针指向当前对象所属的类
[p eat];表示给p所指向的对象发送一条eat消息,调用对象的eat方法,此时对象会顺着内部的isa指针找到存储于类中的方法,执行
一个类可以创建多个对象,不同的对象在内存中分配的是不同的存储地址,所以个成员属性的地址各不相同
11. 常见错误汇总:
@interface @end和iplementation @end 不能嵌套包含。
只有类的声明没有类的实现
漏写@end
成员变量没有写在{}里。
方法声明时不能对类的成员变量进行初始化。成员变量不能脱离对象而独立存在
方法无法像函数那样调用。
成员变量和方法不能用static 等关键字修饰,不要和c语言混搅。
类的实现可以写在mian函数后面,在使用之前只要声明就可以了。
经典错误: -[Person run]:unrecognized selector sent to instance 0x100103410
表明run 方法没有实现
12.对象和方法的关系:
对象做为方法的参数传递: 实例代码如下:
- @autoreleasepool {
- //创建一个士兵对象
- Soldier *s = [Soldier new];
- s->_name = @"三多";
- s->life = 98;
- s->level = 2;
- //创建枪的对象
- Gun *gun = [Gun new];
- gun->_size = @"小米加步枪";
- gun->_bulletCount = 3;
- //士兵开枪
- [s fireByGun:gun];
- [s fireByGun:gun];
- [s fireByGun:gun];
- }
- return 0;
- }
对象作为方法的返回值:格式为:
-(Person *)basePerson:(Person *)Person
对象还可以作为方法的参数连续传递 比如例子:士兵开枪 枪射子弹
13.NSString类的介绍:
NSString是OC中的核心字符的类之一。
字符串创建的方法有:
创建常量字符串,注意使用“@”符号
创建空字符串 NSString *s=[NSString new];
第三种方法: NSString*name =[NSString stringWithFormat:@"nig"];
用一个已经存在的字符串创建一个新的字符串
NSString *s2 =[[NSString alloc] initwithString:s];
14. 字符串长度计算的方法:
length:指的是字符的长度 一个字 和字符 或字母都是一个长度
NSString *S1=@“ zhangsanfeng!”;
strlen 一个字节为3个字节