黑马程序员技术交流社区
标题: 学习笔记10-OC入门基础 [打印本页]
作者: 仰望星空的猪 时间: 2015-11-23 19:18
标题: 学习笔记10-OC入门基础
本帖最后由 仰望星空的猪 于 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
作者: 超人不会飞啊 时间: 2015-11-23 23:40
速度真快啊~感谢分享
作者: 仰望星空的猪 时间: 2015-11-24 10:07
嘿嘿 几天的一起发表 的
作者: cxk 时间: 2015-11-24 11:23
看着还不错的样子哦,继续努力,我也要整理出属于我自己的笔记。
作者: linexs 时间: 2015-11-24 12:16
谢谢,撸主分享
作者: liury 时间: 2015-11-24 12:59
收藏
作者: 仰望星空的猪 时间: 2015-11-24 13:38
嗯 努力就有希望
作者: heimaye 时间: 2015-11-24 14:02
这个笔记,先记下,大神膜拜了,有收徒弟吗
作者: 仰望星空的猪 时间: 2015-11-24 14:37
大神?? 你也是新入门的吧 跟我一样
作者: 爱尘iPhone 时间: 2015-11-24 15:26
你这流程已经走到哪里了啊!写个流程攻略吧!小神
作者: 仰望星空的猪 时间: 2015-11-24 17:03
开始做入学考试了 等我过了再说吧 哈哈
作者: 649685603 时间: 2015-11-24 18:08
printf("%s,%d",per.name,per.age);
作者: susie_cc 时间: 2015-11-24 18:13
楼主是上的基础班还是自己学习的,学了多长时间啊?
作者: HI耀玮 时间: 2015-11-24 18:54
进来看看,不错
作者: MadeLife丶 时间: 2015-11-25 01:37
顶一个!
作者: cxk 时间: 2015-11-25 22:57
谢谢你哦 我会加油的
作者: 罗文强 时间: 2015-11-25 23:04
楼主这个学习方法很不错哈,向楼主学习了!希望继续更新
作者: qinxiaodong 时间: 2015-11-26 17:25
面试用的到
作者: FengLinHuoShan 时间: 2015-11-26 21:48
支持,加油支持,加油支持,加油
作者: Newbee_123 时间: 2015-12-3 00:26
马上学OC 楼主笔记不错。。学习学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |