浅析Objective-C的程序结构及面向对象的编程方式
本文主要介绍Objective-C的程序结构及面向对象的编程方式。
程序结构
Objective-C的程序结构如下:
#import <Foundation/Foundation.h>
int main ()
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog (@"程序开始运行...\n" );
// 声明变量并赋值
int a = 10;
// 使用if语句检查条件
if( a < 20 )
{
// 如果条件为真,则输出以下信息
NSLog (@"a 小于 20\n" );
}
else
{
// 如果条件为假,则输出以下信息
NSLog (@"a 大于 20\n" );
}
NSLog (@"程序执行完毕!\n" );
[pool drain];
return 0;
}
该程序结构由以下几部分组成:
-
引用Foundation库头文件,路径为
#import <Foundation/Foundation.h>
。 -
定义main函数,是程序的入口。
-
创建对象实例。在上面的示例中,创建了一个对象实例NSAutoreleasePool * pool。
-
输出提示信息。使用NSLog()函数可将信息输出到控制台。
-
执行业务逻辑。这里使用了if语句进行条件判断。
-
执行完任务后释放资源,即销毁对象实例。这里使用了[pool drain]语句。
-
返回值。通常情况下,main函数的返回值为0,表示程序成功执行完毕。
面向对象的编程方式
Objective-C是一种面向对象的编程语言,支持封装、继承和多态等概念。下面分别介绍这些概念。
封装
Objective-C中的封装可以通过实例变量和方法实现。封装以实例变量为基础,方法可以访问这些实例变量。
示例代码:
@interface SampleClass:NSObject
{
// 声明实例变量
int x;
}
// 声明方法
- (void)sampleMethod;
@end
@implementation SampleClass
- (void)sampleMethod{
NSLog(@"实例变量 x 的值为 %d", x );
}
@end
在上面的示例中,实例变量x被声明为一个私有变量,只能通过在类的内部定义的方法进行访问。
继承
Objective-C支持继承概念,它允许定义一个基类,该基类包含通用的数据和函数,派生类可以继承该基类并添加自己的数据和功能。
示例代码:
@interface ParentClass:NSObject
- (void)methodA;
@end
@interface ChildClass:ParentClass
- (void)methodB;
@end
@implementation ParentClass
- (void)methodA{
NSLog(@"父类方法");
}
@end
@implementation ChildClass
- (void)methodB{
NSLog(@"子类方法");
}
@end
在上面的示例中,类ChildClass继承类ParentClass,因此ChildClass可以调用方法methodA(),该方法是从基类继承的。
多态
Objective-C支持多态概念,它允许使用具有不同形式的对象通过相同的接口进行操作。
示例代码:
@interface Shape:NSObject
{
NSString* name;
double area;
}
-(void)setName:(NSString*)name;
-(NSString*)getName;
-(void)getArea;
@end
@implementation Shape
-(void)setName:(NSString*)nameVal{
name = nameVal;
}
-(NSString*)getName{
return name;
}
-(void)getArea{
NSLog(@"父类 Shape 没有计算面积,子类需要实现");
}
@end
@interface Circle:Shape
{
double radius;
}
-(void)setRadius:(double)radiusVal;
-(double)getRadius;
-(void)getArea;
@end
@implementation Circle
-(void)setRadius:(double)radiusVal{
radius = radiusVal;
}
-(double)getRadius{
return radius;
}
-(void)getArea{
area = M_PI * radius * radius;
NSLog(@"%@ 的面积为 %f", [self getName], area);
}
@end
在上面的示例中,Circle是继承于Shape的,它重载了getArea方法。通过多态的方式,Circle可以调用Shape的方法getName和其自身的getArea方法。
示例说明
以下两个示例说明:
示例1:使用面向对象的方式计算长方形的面积
@interface Rectangle:NSObject
{
double length;
double breadth;
}
-(void)setLength:(double) len;
-(void)setBreath:(double) bre;
-(double)area;
@end
@implementation Rectangle
-(void)setLength:(double) len{
length = len;
}
-(void)setBreath:(double) bre{
breadth = bre;
}
-(double)area{
return length * breadth;
}
@end
int main()
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Rectangle *rect = [[Rectangle alloc]init];
//设置长和宽
[rect setLength:180.0];
[rect setBreath:120.0];
//输出面积
NSLog(@"长方形的面积为 %f", [rect area]);
[pool drain];
return 0;
}
在上面的示例中,定义了一个长方形的类Rectangle,并使用面向对象的方式计算长方形的面积。
示例2:使用Objective-C创建文件和目录
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSFileManager *fm;
NSString *dest = @"/tmp/newdir";
NSMutableString *str;
int i;
fm = [NSFileManager defaultManager];
str = [NSMutableString stringWithString: @"test"];
// 创建目录
if ([fm createDirectoryAtPath: dest withIntermediateDirectories: YES
attributes: nil error: NULL] == NO) {
NSLog (@"创建目录失败");
return 1;
}
// 创建文件
for ( i = 0; i < 10; ++i ) {
[str appendString: @"\n"];
[str writeToFile: [dest stringByAppendingPathComponent:
[NSString stringWithFormat: @"data-%d.txt", i]]
atomically: NO encoding: NSASCIIStringEncoding error: NULL];
}
NSLog (@"所有文件创建成功!");
}
return 0;
}
在上面的示例中,通过Objective-C代码创建了一个名为newdir的目录,并在目录中创建了10个名为data-0.txt、data-1.txt、...、data-9.txt的文本文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析Objective-C的程序结构及面向对象的编程方式 - Python技术站