昨天介绍了OC中类的定义和使用:http://blog.csdn.net/u014010699/article/details/49906117,今天我们来继续学习类的初始化方法和点语法的使用
一、首先来看一下类的初始化方法
在Java中我们知道一个每个类都有构造方法,这里的初始化方法就是和构造方法一个概念的,但是这里有一个区别是:Java中有默认构造方法,当我们去自定义构造方法的时候,这个默认构造方法就会被替换了,但是OC中是不会的,这点需要注意。
下面来看一下如何自定义初始化方法:
Person.h
注:OC中自定义初始化方法的名称必须是以init开头
在来看一下实现:
Person.m
同时这里还要记住一点:
以后OC中自定义初始化的方法的模板:
下面来看一下如何使用初始化方法:
main.m
运行结果:
二、看一下OC中的点语法
OC中的点语法其实没什么高端的,但是他和Java中的那种使用对象变量直接访问public类型的变量的点是不一样的,所以这里就单独说明一下:
点语法只能适用于set/get方法,如果没有对应的set/get方法的话,是不能使用.语法的
OC中的get方法和Java中不太一样,OC中只要一个方法有返回值都可以认为是get方法,Java中是形如getXXX这样的才叫做get方法。
下面来看一个例子吧:
Person.h
同时这里要注意的是其实showInfo方法也是一个get方法,因为他又一个返回值类型。
所以在OC中使用点语法有两个条件:
1、必须是属性
2、有对应的get/set方法
下面来看一下实现吧:
Person.m
我们这里不能使用self.age = age,因为self.age等价于[self setAge:age],这样就会出现死循环了
这个和Java就有很大的区别了,Java中我们是可以使用this.age = age的,而且经常这样做,但是OC中不行,原因很简单,因为OC中的点语法相当于调用set/get方法,那么在set/get方法中调用set/get方法,那就会出现了死循环了。所以这点一定要注意。
还有一个需要注意的是,刚刚在Person.h中定义了一个test方法,但是在Person.m中并没有实现,在OC中编译是不会报错的,但是运行的时候就会报错了。
看一下如何使用点语法:
main.m
运行结果:
这里需要注意的是报了一个错误,这个错误也是我们后面开发过程中经常犯的一个错误,就是这个方法没有实现,我们在Person.h中定义了test方法,但是没有在Person.m中进行实现,在main.m中进行调用就报了这个错误,但是编译的时候是没有报错的。
总结
今天就简单的介绍了OC中的初始化方法的定义和点语法的使用,其中初始化方法类似于Java中的构造方法,点语法就是get/set的缩减版