上节讨论了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 缩短编译代码,减轻编译器负担。