【黑马程序员】Objetive-C 对象详解 一
2015-03-18 22:56
363 查看
1、对象的定义
interface 声明:用于声明类所拥有的方法和成员变量
implementation 实现: 方法的具体实现
一个简单的类实现
事实上,有过其它编程语言基础的童鞋看起来oc的语法很奇怪,就拿类的定义来说,一般编程语言都是以class开头直接进行定义,但oc因为有c基因的缘故,所以保留了声明+实现的方式来进行定义,另外,譬如方法前面的加号和减号的区别我们后文再详解。
2、成员变量的作用域
一般来说,我们定义一个对象,对成员变量的赋值进行控制,或者对某些成员变量进行保护,使其只能在一定作用域内被访问,我们就可以用到oc的@public、@private和@protected关键字。
事实上,这三个词在其它面向对象语言中也十分常见,除了oc关键字前特有的@符号之外,没有什么特别之处。
他们的作用域分别是:
值得注意的是,oc中作用域关键字并不一定要写在成员变量声明前面,来看一个例子:
在这个类的定义中,我们在成员变量开头使用了@public,标志着在这一行后直到遇到下一个private或者protected之前,中间这些变量都是public,公共变量。
也就是说,在上面这个类中,sex和age都是可以外部进行访问的。
但此后我们使用了@private关键字重新进行声明,两个作用,1、告诉编译器,public的在这结束了,2、private的成员变量在此开始。
这一点有很大的不同。
另外,如果我们不对成员变量作用域进行显式声明,那么这个成员变量的作用域就是private。
3、类方法与对象方法
怎么样,听到这名字有没有觉得有点高大上。事实上,类方法与对象方法就是我们熟知的静态方法和实例方法,两种叫法都比较贴切,但是oc里习惯性的叫做类方法和对象方法。
类方法以 + 号开头,表明声明体后面是一个类方法,类方法不需要实例化即可进行访问
对象方法以 - 号开头,顾名思义,对象方法需要得到对象的实例后才能进行调用
interface 声明:用于声明类所拥有的方法和成员变量
implementation 实现: 方法的具体实现
一个简单的类实现
@interface Person : NSObject { char *_name; } - (void)setName:(char *)name; - (char *)name; @end @implementation Person // setter - (void)setName:(char *)name{ _name = name; } // getter - (char *)name{ return _name; } @end
事实上,有过其它编程语言基础的童鞋看起来oc的语法很奇怪,就拿类的定义来说,一般编程语言都是以class开头直接进行定义,但oc因为有c基因的缘故,所以保留了声明+实现的方式来进行定义,另外,譬如方法前面的加号和减号的区别我们后文再详解。
2、成员变量的作用域
一般来说,我们定义一个对象,对成员变量的赋值进行控制,或者对某些成员变量进行保护,使其只能在一定作用域内被访问,我们就可以用到oc的@public、@private和@protected关键字。
事实上,这三个词在其它面向对象语言中也十分常见,除了oc关键字前特有的@符号之外,没有什么特别之处。
他们的作用域分别是:
关键字 | 本类 | 子类 | 外部 |
@private | √ | × | × |
@protected | √ | √ | × |
@public | √ | √ | √ |
@interface Student : NSObject { @public int sex; // public int age; // public @private int class; // private int no; // private }
在这个类的定义中,我们在成员变量开头使用了@public,标志着在这一行后直到遇到下一个private或者protected之前,中间这些变量都是public,公共变量。
也就是说,在上面这个类中,sex和age都是可以外部进行访问的。
但此后我们使用了@private关键字重新进行声明,两个作用,1、告诉编译器,public的在这结束了,2、private的成员变量在此开始。
这一点有很大的不同。
另外,如果我们不对成员变量作用域进行显式声明,那么这个成员变量的作用域就是private。
3、类方法与对象方法
怎么样,听到这名字有没有觉得有点高大上。事实上,类方法与对象方法就是我们熟知的静态方法和实例方法,两种叫法都比较贴切,但是oc里习惯性的叫做类方法和对象方法。
类方法以 + 号开头,表明声明体后面是一个类方法,类方法不需要实例化即可进行访问
对象方法以 - 号开头,顾名思义,对象方法需要得到对象的实例后才能进行调用
#import <Foundation/Foundation.h> @interface Person : NSObject + (void)sayHello; - (void)sayWorld; @end @implementation Person + (void)sayHello{ NSLog(@"Hello!"); } - (void)sayWorld{ NSLog(@"World!"); } @end int main() { [Person sayHello]; // Hello! Person *o = [Person new]; [o sayWorld]; // World! return 0; }
相关文章推荐
- 黑马程序员_Java对象初始化详解
- 黑马程序员-javaSE学习之面向对象细节以及重点详解
- 黑马程序员_Java多态性详解——父类引用子类对象
- 黑马程序员--Java学习笔记之面向对象思想(单例模式详解、匿名对象、静态、final)
- 黑马程序员-对象的初始化过程详解
- Document对象详解
- javascript-document对象详解
- document对象详解
- ADO.NET常用对象详解之:Connection对象
- ADO.NET常用对象详解之:DataSet对象
- document对象详解
- ADO.NET常用对象详解之:DataAdapter对象
- Net Remoting 与 Server 对象详解
- document对象详解
- JavaScript常用对象详解
- JSP内部对象详解
- JSP内建对象详解
- document对象详解
- document对象详解
- SQL语句参考及记录集对象详解[转]