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

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

2015-03-18 22:56 363 查看
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!");
}

@end
int main() {
[Person sayHello];              // Hello!
Person *o = [Person new];
[o sayWorld];                   // World!
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息