`
mmdev
  • 浏览: 12927919 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Objective-C基础——程序的整体语法结构(02)

 
阅读更多
接下来我们看一下ObjC中的另一个标示部分……
@implementation 部分的一般格式

@implementation NewClassName
methodDefinitions;
@end
//NewClassName表示的名称和@interface 部分的类名相同

看一个简单的例子:
//***************************
//Fraction.h 文件
@import <Foundation/Foundation.h>
@interface Fraction : NSObject
{
int numerator;
int denominator;
]

-(void) print;
-(void) setNumberator : (int) n;
-(void) setDenominator : (int) d;
@end



//Fraction.m 实现文件
@implementation Fraction
-(void)print
{
NSLog(@"%i/%i",numerator,denominator);
}

-(void)setNumberator :(int)n
{
numerator = n;
}

-(void)setDenominator :(int)d
{
denominator = d;
}
@end
//***********************************************
对程序就不分析了,不理解的地方请查看相关资料。
下来我们看一下对象的获取。
Fraction *myFraction = [[Fraction alloc] init];

获取对象的实例并初始化了其实例变量(可以这样理解:将alloc消息发送给Fraction类请求创建一个新实例,然后向新创建的实例对象发送init消息来进行初始化对象)。
另一种方法:
Fraction *myFraction = [Fraction new];//这种方法一般不使用,可作为了解

对象调用的方法: [myFraction setNumerator : 1];
使用完后要释放Fraction对象的方法:[myFraction release];
注:创建一个新的对象,都要请求分配内存,在完成该对象的操作后,必须释放其所用的内存空间。(Object-c的内核是C语言的,并基于C语言实现OOP的一些特性。Object-c是对C语言的扩展,这和C++的前身Better-c有很大的相似之处,Object-c的新版本里实现了和Java类似的垃圾回收机制,但基于iphone平台的资源限制,iphone平台并不支持垃圾回收机制。)
外部要访问实例变量需要通过类的方法来检索,不能直接访问。
示例:
//******************
//Rectangle.h 文件
@interface Rectangle : NSObject
{
int width;
int height;
}

@property int width, height;
-(int)area;
-(int)perimeter;
-(void)setWidth:(int)w andHeight:(int)h;
@end


//Recangle.m
@import "Rectangle.h"

@implementation Rectangle
@synthesize width, height;
-(void)setWidht:(int)w andHeight(int)h
{
widht = w;
height = h;
}

-(int)area
{
return widht * height;
}
-(int)perimeter
{
return (width + height) *2
}
@end




//Square.m
#import"Rectangle.h"
@interface Square :Rectangle
-(void)setSide :(int) s;
-(int)side;
@end


//Square.m


@import "Square.h"
@implementation Square :Rectangle
-(void)setSide :(int) s
{
[self setWidth : s andHeight: s]
}
-(int) side
{
return width;
}
@end
//***********************


self关键字是用来指明对象是当前方法的接受者。
例如下来的这个例子(正方形)的方法实现:
-(void)setSide : (int) s
{
[self setWidth: s andHeight : s]
}
利用其父类的setWidth:andHeight:方法来实现的。


调用消息的类可以不知道如何响应这个消息的。如果不知道如何处理这个消息,它会自动的将这个消息转给父类,还不行就转给父类的父类,都没有找到就会报错。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics