【黑马程序员】Objetive-C 对象详解 一

来源:互联网 发布:电信网络能申请外网吗 编辑:程序博客网 时间:2024/05/16 00:31

1、对象的定义

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√√√

值得注意的是,oc中作用域关键字并不一定要写在成员变量声明前面,来看一个例子:


@interface Student : NSObject{    @public    int sex;       // public    int age;       // public    @private    int class;     // private    int no;        // private}

在这个类的定义中,我们在成员变量开头使用了@public,标志着在这一行后直到遇到下一个private或者protected之前,中间这些变量都是public,公共变量。

也就是说,在上面这个类中,sexage都是可以外部进行访问的。

但此后我们使用了@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!");}@endint main() {    [Person sayHello];              // Hello!    Person *o = [Person new];    [o sayWorld];                   // World!    return 0;}



0 0
原创粉丝点击