本帖最后由 仰望星空的猪 于 2015-11-23 19:23 编辑
1 import 引入头文件 可以防止重复包含 include 需要预处理指令。 2 NSLog 参数的是NSString 类型对象 printf 参数是字符串指针。
NSLog 可以自动换行 输入的内容有日期和项目名称 NSString 是OC的特有用来定义字符串C中不支持 NSLog 可以格式化输出 %@ 打印字符串 但不支持C%s C中不能使用%@打印字符串。 3 @符号的使用 @“xx” 表示xx是OC中的一个字符串。 @标识符 表示OC中的关键字 4 OC中的注释和C的相同 5 OC可以向下兼容C可以使用C中的函数调用方法和C 相同。 6 OC和C差异 1) 源文件对比 C中有.c .o .out .h OC中 .h .m
2)基本数据类型 OC添加了一个 bool类型和block类型。 指针数据类型class(类) id 特殊类型 SEL nil(空对象) 3) 增强了for 快速变量数组和字典等集合。 4) 方法定义 5) Boolean 作用 判断逻辑值 0 假 非0真 存储的值 true 1 false 0 BOOL 类似Boolean YES 1 NO 0 6) 添加异常捕捉机制。 7 面向对象 面向过程: 强调的是功能行为 关注的解决问题需要哪些步骤 面向对象:将功能封装进对象,强调具备了功能的对象 关注解决问题需要哪些对象 面向对象是基于面向过程的。 特性:封装 继承 多态 类:是具有相似内部状态和运动规律实体的集合。(名词提炼法) 类的构成:类型 属性 和方法(行为或对属性中的数据进行操作的方法) 对象:对类的相同特征属性和运动规律的提取。图纸 8 类的声明(.h)和实现(.m) 方法:相当于C中的函数。 +动态方法 - 静态方法 类似java中static定义的方法 声明(@interface):声明类的属性和方法 @interface 类名:父类 { 成员变量 //成员变量声明 } 方法声明 @end //以@end 结束该类的声明
@interface Person:NSObeject { @public; NSString *name; //成员变量声明 int age; }
@end //以@end 结束该类的声明
实现(@implementation)实现声明中定义的方法 @implementation 类名 声明方法的实现 @end 9 对象的创建 OC中对象创建时都是创建的对象指针 类名 *对象名=[类名 new]; Person *person =[ Person new]; new 的作用:向计算机申请内存空间 给成员变量赋初值 返回申请空间的首地址。 10 成员变量的访问 person->name=@“xiaoming”; //成员变量赋值 person->age=15; 点语法 person.name=@“xiaoming”; //成员变量赋值 person.age=15;
NSLog(@”name:%@ \t age:%d”, person->name, person->age);//成员变量的使用。 10 方法的定义、实现和调用 方法前 + 表示动态方法 – 表示静态方法 声明在@interface内 实现在@implementation内 1) 无参无返回值对象方法的声明 -(void) 方法名; 无参无返回值对象方法的实现 -(void) 方法名{ 代码块 } 方法调用 [对象 方法名];
2) 有参无返回值对象方法的声明 参数之间可以加一些修饰词。 -(void) 方法名 : (参数类型) 参数名 :(参数类型)参数名 ; 有参无返回值对象方法的实现 -(void) 方法名 : (参数类型) 参数名1 :(参数类型)参数名2 {
} 注意 每个参数之前有冒号分隔 冒号算方法名的一部分 有参无返回值对象方法的实现 方法调用 [对象 方法名:实参1:实参2];
// // main.m // 1 类的声明、实现和调用 // //
#import<Foundation/Foundation.h>
@interfacePerson :NSObject { NSString *_name; int _age; }
//无参无返回值对象方法的声明 -(void)run; // 有参无返回值对象方法声明 -(void)run:(NSString *)name andSpeed :(int)speed ; @end
@implementationPerson //无参无返回值对象方法的实现 -(void)run{
NSLog(@"person is running"); }; // 有参无返回值对象方法实现 -(void)run:(NSString *)name andSpeed :(int)speed { NSLog(@" %@ is running by %dkmph",name ,speed);
}
@end
intmain(int argc, const char * argv[]) { @autoreleasepool {
Person *p= [Person new]; //无参无返回值对象方法的调用 [p run]; // 有参无返回值对象方法调用 [p run:@"xiaoming"andSpeed:100]; } return 0; }
11 对象的存储细节 创建对象 Person *p =[Person new]; 代码区:存放了类的成员变量及对象方法 堆区:new生成的对象后,堆区中存放了类的成员变量及其初值。 还有一个 _isa指针存放代码区的类的首地址。 并将该实例对象的首地址返回。 栈区:Person *p 之后,栈区存放了指针变量p 并接收new返回的实例对象地址。 调用函数时 先找堆区的实例对象_isa 指针 通过_isa指针找代码区的代码。 12 #pragma mark 组名 #pragma mark – 组之间加一条横线. 13 函数和对象方法对比 对象方法 1)对象方法的声明只能写在 @interface @end之间,对象方法的实现只能写在@implementation @end之间。 2)对象方法都以 – 开头 类方法以+开头 3)对象方法只能由对象来调用,类方法只能由类调用 4) 对象方法归类或者对象所有。
函数 1) 函数属于整个文件,可以写在文件任何位置。 2) 函数不存在隶属关系 3) 可以直接调用 4) 不可以访问对象中的成员变量。 14 常见错误 1) 声明和实现不能嵌套 2) 声明和实现必须同步 3) 成员变量必须写在{}内 4) 成员变量声明时不能赋值。 5) 成员变量不能使用static
|