黑马程序员——OC基础01—类和对象
2015-11-12 12:04
399 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、面向对象之OC
1.入门之 hello world
2.OC与C的差异
1)源文件对比:
C语言: .c .o .out .h;
OC语言:.m(源文件) .h(头文件)
2)研究的数据类型
oc语言中新增了BOOL类型、 BLOCK类型、 指针类型中的class 和id类型、SEL类型和nil类型。
3)C语言中的32个关键字都可以在OC中使用
oc中部分关键字以“@”开头。
4)流程控制语句 新增了增强型的for循环。
5)C语言中的函数称为OC中的方法,但两者仍有区别。
前者是面向过程,后者是面向对象。
3.类和对象
1) 类:
类是具有相识内部状态和运动规律实体的集合,类是多个同种类型事物的抽象。
一个类可以是梨花多个对象,类具有类名/类的属性(实例变量)/类的行为;
2)类的声明:存放于.h 中;
3)类的实现:存放于.m 中
注意:方法的声明和实现都必须以“+”,“—”开头,其中“+”开头的是类方法,“—”开头的是对象方法。
4)main函数中方法的调用
5)OC中的方法分为两种:对象方法、类方法 对象方法:
a 对象方法只能由对象调用
b 对象方法中可以访问当前对象的成员变量
c 调用格式 [对象名 对象方法名];
类方法:
a 类方法只能由类来调用
b 类方法不能访问实例(成员)变量,因为类方法由类来调用,并没有创建存储空间来存储类中的成员变量。
c 调用格式[类名 类方法名];
d 类方法的好处和适用场合:
e 不依赖与对象,执行效率更高,因为不用创建对象,节省内存空间。
4.无参方法的声明、实现与调用
实现:- (void) eat: (NSString*)foodName{ 方法内容 }
调用:[car speed];
代表[指针变量名 方法名];
5.有参方法的声明与调用
6.补充:[Car new];中在初始化的时候,如果实例变量时基本数据诶行,此时初始化为0;如果是字符串类型,则初始化为NULL。
实例变量保存在堆区,而指针变量p保存在棧区;
对象方法保存在代码区;
找到p对应的堆区多空间,然后找到_isa指针,找到_isa指针指向的代码区的空间,然后到该区间中找到方法。
一、面向对象之OC
1.入门之 hello world
1)#import <Foundation/Foundation.h> 它是预处理指令,可以防止重复包含。 Foundation是头文件,包含了OC中大量的头文件。 2)OC的基类是NSObject; 3)NSLog(@“hello world”);不同于c语言的printf函数,在Xcode中运行后会有像日志一样的时间显示。NSLog有自动换行功能。 NSLog函数的参数是一个NSString对象,所以以“@”开头输出。 4)OC语言能向下兼容所有的C语言,但OC中也有部分自己特有的表达方式。 NSString *str = @“张三丰”; NSlog(@“%s”,str); //错误的❌ NSLog(@“%@”,str); //正确的 ✅ 5)OC中的注释除了单行和多行注释,又多了文档注释。 6)“@”的应用 将一个C语言的字符串转化为OC中的字符对象NSString 也能引用关键字。
2.OC与C的差异
1)源文件对比:
C语言: .c .o .out .h;
OC语言:.m(源文件) .h(头文件)
2)研究的数据类型
oc语言中新增了BOOL类型、 BLOCK类型、 指针类型中的class 和id类型、SEL类型和nil类型。
3)C语言中的32个关键字都可以在OC中使用
oc中部分关键字以“@”开头。
4)流程控制语句 新增了增强型的for循环。
#import<Foundation/Foundation.h> int main (int argc,const argv * char[]){ @autoreleasepool{ NSArray *arr = @[@"a",@"b",@"c"]; for(NSString *str in arr){ NSLog(@"%@"",str); } } return 0; } 运行结果是: a b c
5)C语言中的函数称为OC中的方法,但两者仍有区别。
前者是面向过程,后者是面向对象。
3.类和对象
1) 类:
类是具有相识内部状态和运动规律实体的集合,类是多个同种类型事物的抽象。
一个类可以是梨花多个对象,类具有类名/类的属性(实例变量)/类的行为;
2)类的声明:存放于.h 中;
@interface 类名:父类名 { @public //全局变量都可以打开 //定义类的属性(可以没有) } //类的方法(必须写在这个地方), @end
3)类的实现:存放于.m 中
@implementation 类名 //方法的实现 @end
注意:方法的声明和实现都必须以“+”,“—”开头,其中“+”开头的是类方法,“—”开头的是对象方法。
4)main函数中方法的调用
类名或者对象名 方法名]; Car *car = [Car new]; 在这里[car new]有三个功能, 分别是在内存的棧区为新建对象car申请了一个新的存储空间; 为类中的每一个成员进行初始化; 将新申请空间的首地址返回。 而也表示了新定义了一个c=Car类型的指针变量,指向新申请的空间。 (用car 类实例化了一个实例对象car);
5)OC中的方法分为两种:对象方法、类方法 对象方法:
a 对象方法只能由对象调用
b 对象方法中可以访问当前对象的成员变量
c 调用格式 [对象名 对象方法名];
类方法:
a 类方法只能由类来调用
b 类方法不能访问实例(成员)变量,因为类方法由类来调用,并没有创建存储空间来存储类中的成员变量。
c 调用格式[类名 类方法名];
d 类方法的好处和适用场合:
e 不依赖与对象,执行效率更高,因为不用创建对象,节省内存空间。
4.无参方法的声明、实现与调用
声明:- (void) eat: (NSString*)foodName; 其中方法名为eat: 方法类型符号 返回值类型 方法名 参数类型 参数名称;
实现:- (void) eat: (NSString*)foodName{ 方法内容 }
调用:[car speed];
代表[指针变量名 方法名];
5.有参方法的声明与调用
声明: -(int) sum: (int)x and: (int)y; 实现:作用在@implemantation 与@end中; 调用: sum1==[c sum:4 and:5];
6.补充:[Car new];中在初始化的时候,如果实例变量时基本数据诶行,此时初始化为0;如果是字符串类型,则初始化为NULL。
实例变量保存在堆区,而指针变量p保存在棧区;
对象方法保存在代码区;
找到p对应的堆区多空间,然后找到_isa指针,找到_isa指针指向的代码区的空间,然后到该区间中找到方法。