现在的位置: 首页 > 综合 > 正文

oc 面向对象特性(接口,实现,方法发送,访问成员变量)

2017年10月24日 ⁄ 综合 ⁄ 共 2055字 ⁄ 字号 评论关闭

概述

Objective-C作为一种面向对象的编程语言,具有面向对象的基本特征,即:封装、继承和多态。主要介绍Objective-C中有关面向对象基本概念:类、对象、方法和属性等。 


Objective-C中的类 

类是Objective-C中的一种重要的数据类型,是组成Objective-C程序的基本要素。Objective-C的类声明和实现包括两个部分:接口部分和实现部分。 

@interface Song: NSObject { ......
}
......
@end
@implementation Song ......
@end


接口部分

使用关键字@interface,主要定义了类名、继承的父类、实现的协议、成员变量和方法等信息。下面的代码是Song类的接口部分声明。 

@interface Song : NSObject {
      NSString *title;
      NSString *artist;
      long int duration;
}
- (void)start;
- (void)stop;
- (void)seek:(long int)time;
@end


实现部分

使用关键字@implementation,主要实现了在接口部分定义的方法等信息。下面的代码是Song类的实现部分声明。 

@implementation Song
- (void)start { //开始播放
}
- (void)stop {
//停止播放 }
- (void)seek:(long int)time { //跳过时间
} @end

方法和消息

Objective-C中方法定义非常古怪,它遵循了SmallTalk语法风格,它将一个方法名字分成几个部分。 

说明:


定义了两个参数的方法,第一个参数是anObject,参数类型是id类型,第二个参数是index,参数类型是NSUInteger,这叫做多重参数。它的返回类型是void,方法签名是insertObject:atIndex:。方法类型标识符中都“-”代表方法是实例方法,“+”代表方法是类方法,关于实例方法和类方法我们将在后面内容中讨论。如果上面的方法变成C或C++形式,则是下面的样子的:


-(void) insertObjectAtIndex(id anObject, NSUInteger index) 

消息发送

对于方法的调用通常也不称之为调用,而是称为发出消息,操作符号不是“.”而是“[⋯]”,如下所示:

[myObject insertObject: ojb1 atIndex:0];

即向myObject对象发出一个消息insertObject:atIndex:。而在实际使用时候这两种叫法都会用,这不是严格划分。 

访问成员变量

从面向对象的封装角度考虑问题,要想访问类中的成员变量,是要通过方法访问的,成员变量前面要有作用域限定符(protected, public, private),这些存取权限修饰符我们将在后面介绍。

成员变量的访问,是通过读取方法(getter)和设定方法(setter)。 

Song.h文件:

@interface Song : NSObject {
       NSString *title;
       NSString *artist;
       long int duration;
}
//操作方法
- (void)start;
- (void)stop;
-  (void)seek:(long int)time;
//访问成员变量方法
- (NSString *)title;
- (void)setTitle:(NSString *)newTitle;
- (NSString *)artist;
- (void)setArtist:(NSString *)newArtist; - (long int)duration;
- (void)setDuration:(long int)newDuration; @end


Song.m文件:

@implementation Song
- (void)start {
//开始播放 - (void)stop {
//停止播放
- (void)seek:(long int)time {
//跳过时间 ... ...
//访问成员变量方法
- (NSString *)title {
       return title;
}
- (void)setTitle:(NSString *)newTitle {
       title = newTitle;
}
- (NSString *)artist {
       return artist;
}
- (void)setArtist:(NSString *)newArtist {
       artist = newArtist;
}
- (long int)duration {
       return duration;
}
- (void)setDuration:(long int)newDuration {
} @end

小结

采用了封装之后就可以通过存取方法访问属性,例如[mySong title]是取得title成员变量内容。

如果不考虑封装的问题,单从技术上讲Objective-C,可以直接通过对象访问成员变量的,访问操作符是“->”,例如:mySong->title,也可以取得title成员变量的内容。 

抱歉!评论已关闭.