您的位置:首页 > 职场人生

黑马程序员——OC基础01—类和对象

2015-11-12 12:04 399 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

一、面向对象之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指针指向的代码区的空间,然后到该区间中找到方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: