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 缩短编译代码,减轻编译器负担。
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 缩短编译代码,减轻编译器负担。
相关文章推荐
- 学习笔记——CSS的高级特性:复合、继承、层叠
- Learn Objective‐C,学习笔记03 类别(实现多重继承的方法)
- 【Objective-C学习笔记】OC三大特性:封装、继承、多态
- (原创)c#学习笔记08--面向对象编程简介02--OOP技术02--继承
- Objective-C基础学习笔记(四)-面向对象的三大特性之继承-self关键字
- Objective-C基础学习笔记(四)-面向对象的三大特性之继承
- C++学习笔记—OOP三大特性之继承
- java高级特性学习笔记
- C#学习笔记--类的重要特性:继承(转载)
- python学习笔记(5)-高级特性(一)-切片
- Objective-C学习笔记--继承
- java高级特性学习笔记
- Objective-C学习笔记---类别(实现多重继承的方法)
- 【Python学习笔记】python高级特性:迭代器
- Objective-C 学习笔记(二) 类继承,组合,多态等
- Objective-C 学习笔记 04 - 继承和对象的实例
- Objective-C学习笔记十:继承二
- Python之学习笔记(高级特性)
- JAVA高级视频02_IO输入与输出 06 PipedInputStream和PipedOutPutStream 学习笔记
- Python学习笔记——高级特性