您的位置:首页 > 移动开发 > Objective-C

Learn Objective‐C,学习笔记02 类的继承,高级oop特性

2010-10-26 15:55 656 查看
上节讨论了object-c的基本语法结构,每个类需要实现.h和.m文件来完成类的定义和类的实现,

student.csdn.net/space.php

本节介绍类的继承和其他oob语法特征

int sharedValue; //共享一个整型变量

#import "ClassName.h”

@implementation ClassName

method definitions

@end

对象(Object):

? 一个对象包括一个数据结构(对象的所有变量),和一组行为(对象的所有方法)

? 行为使用或影响数据结构中的数据 (方法)

? 在Objective-C中,通过消息机制来调用对象的方法 [对象 消息] 例如: [tank 移动]

? 当对象不再使用,要及时释放其占有的资源(如内存空间) release



id:

typedef struct objc_class *Class;

typedef struct objc_object{Class isa;}*id;

? 在Objective-C中,所有的对象(不管它属于那种类)都有一个通用类型id

? id和Class都是指针类型,所以说每个对象都是由地址来表示

? nil用来表示空对象,值为0

?在运行过程中用来实现 动态类型转换

对象初始化

NSString *string=[[NSString alloc] init]

在Objective-C中,对象都是指针类型;

Objective-C对象的建立:

a:为对象分配内存区域(alloc 或new它们都返回id类型,运行时系统会动态转换为你想要的类型)

b:对对象进行初始化(init)

-(id)init {

if (self = [super init]) {

myDate = [[NSDate alloc] init];

}

return self;

}

同Java,C++语言一样,子类继承了父类的所有方法和变量。

对象通过self 指针引用自身,每个对象都有self指针;

如:[self display];

对象通过super 指针引用父类,特指其父类方法或变量。

如:[super display];



Object-c属性声明:

@property(attributes) type name;

attribetes可选;

type 变量类型 ;

name 变量名;

@interface Test:NSObject

{

float value;

NSString *string;

}

@property float value;

@property(retain,nonatomic) NSString *string;

@property(nonatomic,retain) NSString *temp;

@end

实现如下:

@implementation Test

@synthesize value;

@dynamic string;

@end;

在属性名称前@synthesize,通知编译器生成该变量的存取器方法。

就相当于

-(float)value;

-(void)setValue:(float)value;

前者为getter方法,后者为setter方法

@dynamic string;

编译器不会自动生成getter/setter方法;需要你自己去实现getter/setter方法;

-(NSString *)string

{

return(string);

}

-(void)setString: (NSString *)str

{

[string release];

string=[str retain];

}

attributes常用值:

readwrite:对变量可读可写,默认值,即同时生成getter/setter方法

readonly:对变量只可读,只生成getter方法

assign:普通的变量赋值;默认值

retain:变量是对象才可用。原对象release,新对象retain;(在内存管理部分做详细说明)

copy:遵守NSCoping协议,调用copy方法返回新对象

atomic和nonatomic:默认为atomic,多线程用atomic,实现对象加锁。

getter=方法 setter=方法

可以指定getter方法或setter方法,而不需要默认的以变量名或set+变量名命名的方法



忘了讨论类的继承(isa)和包含(hasa)了

类的继承

@interface ClassName : Superclass

{

instance variable declarations //实例变量声明

}

method declarations //方法声明

@end

类的包含

#import "ItsSuperclass.h”

@class Rectangle;

@interface ClassName : ItsSuperclass

{

Rectangle *rectangle;

}

@end

@class 告诉编译器Rectangle是一个类,不需要引入它的头文件;

@class 缩短编译代码,减轻编译器负担。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: