赞
踩
本节用一简短的文章来说下是ObjectiveC中的类。类其实是OOP中的一个概念,概念上简单来讲类是它是一组关系密切属性的集合,所谓的关系就是对现实事物的抽象。
- 上面提到的关系包括很多种,比如has a, is a,has some等;
- 关系是一种抽象过程,源于对事务的理解,同时还要平衡开发的成本,这是一门艺术;
下图是一张通用的类完整结构图表示,本章暂时只讲最基础的部分,后续章节会围绕这个基础逐渐深入展开。
几点需要说明下:
ObjectiveC中的代码实现模式:
几点需要说明下:
- 在ObjectiveC中,会把一个类拆分成两个文件接口(.h)和实现(.m)。
- ObjectiveC中的文件只是一个载体,具体的定义是由关键标识来定义的,比如在一个.h文件中可以定义多个接口定义;在一个.m文件中也可以定义多个接口的实现
在同一个.m文件中书写全部的代码,这种方式并不推荐,因为会给维护带来很大问题。
#import <Foundation/Foundation.h>
// ----------------------类声明----------------------------
@interface Fraction : NSObject
@end // Tire
// -----------------------类实现---------------------------
@implementation Fraction
- (NSString *) description
{
return (@"I am a tire. I last a while");
} // description
@end // Tire
// -----------------------main入口函数---------------------------
int main(int argc, const char * argv[]) {
@autoreleasepool {
Fraction *engine = [Fraction new];
}
return 0;
}// main
所以推荐的类组织方式是:
把@interface和@implementation代码定义在同一个.m文件中,这种方式呢做练习用还可以,如果是正式的程序就不太方便了。因为这样的话在代码行数比较多时维护会是个大总是,所以最好的方法是分离接口和实现,实现分而治之,如下:
使用XCode工具,在“New File时”选择Cocoa class创建文件时会自动分离.h和.m,如下图所示:
在下一步窗口中添填写新创建的类名称,也可以选择需要继承的父类(父类可以是自定义的类):
最后设置文件存放目录,也可以设置目标和群组,复杂的项目可以有多个组和目标:
相当于类功能的描述,默认格式上文件名与类名相同。在.h文件中一般用于定义类的@interface指令、公共的struct定义、enum常量、#defines和extern全局变量。新创建一个Fraction.h文件,代码示例如下:
#import <Foundation/Foundation.h>
@interface Fraction : NSObject
-(void) print;
@end //end Fraction
相当于类功能的实现,默认格式上文件名与类名相同。在.m一般用于定义类的@implementation指令、私有的struct定义、extern全局变量定义。新创建一个Fraction.m文件
如果创建的是以.mm为后缀的文件则可以同时使用C++和ObjectiveC语法,示例代码如下:
#import "Fraction.h"
@implementation Fraction {//私有属性
int numerator;
int denominator;
}
- (void) print {
NSLog(@"%i / %i", numerator, denominator);
}
- (void) setNumerator:(int) n {
numerator = n;
}
- (void) setDenominator:(int) d {
denominator = d;
}
@end
分离后的代码会有如下特点:
//声明部分
-(void) setNumerator: (int) name;
//实现部分
NSString *name;
- (void) setDenominator:(int) name {
name = name;
//上面这行代码必须替换为如下代码,否则会发生错误
self.name = name;
}
类可以通过new或alloc关键字实现实例化,类的实例化是一大块内容,本节只需简单了解其使用调用,如果用XCode创建工程,则会默认生成一个名为main.m的文件,里面包含一个main方法(注意:一个工程只允许存在一个main()方法)。
// -----------------------main入口函数---------------------------
int main(int argc, const char * argv[]) {
@autoreleasepool {
Fraction *engine = [[Fraction alloc] init];
}
return 0;
}
上述就是最简单类的实现,下面看到类封装的基本用法。也是一种最简单的设计模式组合。比如描述一辆汽车:
对象组合其实是一种设计思想,并不是一种技术框架实现。类的扩展有分类和协议两种技术,另一种技术就是合成对象,它可以定义一个类包含其他类的一个或多个对象,这个新类就是所谓的合成对象。即手动处理,比如父子类的实现可修改成如下代码:
@interface Car: NSObject{
Tires *tires[4]; //4条轮胎
Engine *engine; //1个引擎
}
@interface Tires: NSObject{
int par; //标准的气压值
int position;//安装位置
}
@interface Engine: NSObject{
NSString *name; //引擎名称
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。