您的位置:首页 > 移动开发 > Objective-C

Objective-C学习笔记(三):OC之常用的OC语法下

2016-03-01 17:37 323 查看
一、类的声明与实现

1.OC中常见两种文件:.h文件和.m文件

.h文件是头文件,包含方法和属性的声明。

.m文件是参与编译的文件,用来实现类中声明的方法。

这里我们扩充一下,在学习C语言中,我们会遇到几种不同后缀的文件:.c , .o , .out , .exe , .h。其中.c文件是C语言源文件,也就是你自己敲出来的代码;.o文件(.obj)是目标文件,是编译成功后生成二进制文件,不可以直接使用;.out(linux下)和.exe是可执行文件,是目标文件与库文件经过链接(link)产生的。

2.声明类使用关键字@interface和@end



3.实现类使用关键字@implementation和@end



二、函数的声明和实现

1.在OC中我们常把函数称为方法。

1>方法的声明(.h文件)

-(int)sum:(int) a and:(int) b; //一个参数带一个冒号,方法名的设计最好要清楚合理,一目了然

2>方法的实现(.m文件)

-(int)sum:(int) a and:(int) b{

return a+b;

}

2.方法分为+方法和-方法。+方法是类方法(静态方法),-方法是实例方法(动态方法)。

类方法是属于整个类,而不属于某个对象; 类方法只能访问类成员变量,不能访问实例变量,而实例方法可以访问类成员变量和实例变量;类方法的调用可以通过类名.类方法或对象.类方法,而实例方法只能通过对象.实例方法来访问;类方法只能访问类方法,而实例方法可以访问类方法和实例方法;类方法不能被覆盖,而实例方法可以被覆盖。

另外,在.h中声明的所有方法作用域都是public类型,不能更改。

三、成员变量(实例变量/属性)

常用作用域

@public 在任何地方都可以直接访问

@private 只能在当前类的对象方法中直接访问

@protected 只能在当前类及其子类的对象方法中直接访问

在.h文件中声明成员变量,默认是protected属性的;而在.m文件中声明成员变量,默认是private属性的,即使在前面添加public也没有用,除非使用时在头文件中导入.m文件。但是,两者不能声明同名的成员变量。

四、创建一个对象

1.Car *car=[Car new]; //new操作符会在堆内存中开辟一个新的空间

Car *car=[Car alloc]init]; //这里是完整的创建一个可用的对象,alloc用于分配存储空间,init初始化对象

2.重写init方法(自定义构造方法)

当你在.h文件中声明好某个成员变量,创建好一个新的对象,却没有给对象的该变量赋一个值,那么那个变量默认值为0。但是如果你想在创建好对象的同时给它赋一个初始值怎么办呢?这就是现在要讲的重写init方

1.自定义构造方法要注意三点:

1>一定是对象方法,以-开头

2>返回值一般是id类型

3>方法名一般是init开头

2.示例:

1>Person.h:



2>Person.m:



3>main.m



4>运行结果:



这里我讲解一下代码:在.m文件中重写了init方法,返回值为id类型。init方法中有一个[super init],意思是初始化父类中声明的成员变量和属性。这句话是必须的哈。self表示当前对象,在这里指的就是新创建的那个对象。那个if条件语句是表示,如果初始化对象成功,self就肯定不为nil,那么就改变age属性,让其等于10。最后return self,返回一个已经初始化的对象。

3.我们的构造方法可以取其他的名字,比如initwithname啊balabala的,也可以带一些参数,跟上面讲的函数方法的实现类似。还是给个例子吧。

1>Person.h



2>Person.m



3>main.m



4>运行结果



最后我们在这里提一下点语法的概念,点语法的本质还是方法调用,当使用点语法的时候,编译器会自动展开成相应的get,set方法。例如:

stu.age=10 ->它等同于[stu setAge:10];

int a=stu.age ->它等同于int a=[stu age];//不过嘛这个还是要依据具体代码来具体判断

另外要注意在set和get方法中使用self.age=age和return self.age是不允许的,会造成死循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: