Objective-C学习笔记
星期三, 七月 21st, 2010objective-c 是C语言的超集,本质和C语言一样,但语法风格迥异。这篇文章主要是介绍objctive-c的语法规则。
定义一个方法:
头文件中:
-(void) test: (NSString *) firstName : (NSString *) lastName;
其中 test 是方法名,firstName和lastName是两个参数,NSString声明参数的类型为字符串类型。最前面的“-”说明该方法为普通方法(即需要实例化这个类之后才可调用)。若为“+”则声明为静态方法,即为用类名直接可调用。
方法的实现:
- (void)test : (NSString *) firstName : (NSString *) lastName {
NSLog(@”your first Name is:%@,your last Name is %@”,firstName,lastName);
}
方法的调用:
[self test:(NSString *) @"karry" : (NSString *) @"zhang"];
调用方法用[],在objective-c里面意为发送一个消息(message).传入参数时需要写清楚参数的类型。
定义一个类Rectangle
头文件:Rectangle.h
#import <Foundation/Foundation.h>
@interface Rectangle : NSObject {
NSString *name;
NSString *color;
int size;
}
//构造函数,返回值是id类型,名称可自定义
-(id) init : (NSString *) names : (NSString *) colors: (int) sizes;
-(void) setName:(NSString *) names;
-(void) setColor:(NSString *) colors;
-(void) setSize:(int) sizes;
-(void) getArea;
@end
第一句“@interface Rectangle : NSObject ”声明Rectangle 类继承自NSObject类。在Objective-C中,继承用“:”,并且不能多继承。
用init 方法作为构造函数应该是约定俗成的习惯。理论上可以是任意名称。
实现 Rectangle.m
#import "Rectangle.h"
@implementation Rectangle
//构造函数的实现
- (id)init:(NSString *)names : (NSString *)colors : (int)sizes {
if(self = [super init]){
name = names;
color = colors;
size = sizes;
}
return self;
}
-(void) setName:(NSString *) names {
name = names;
}
-(void) setColor:(NSString *) colors{
color = colors;
}
-(void) setSize:(int) sizes{
size= sizes;
}
-(void) getArea{
NSLog(@"%@的颜色是%@,面积是%d",name,color,size);
}
@end
注意init方法中的这一句:if(self = [super init]){,我并没有少写一个等号,这里就是把super 的init返回结果赋值给self.这样做是为了防止超类在初始化的过程中返回的对象不同于原先创建的对象。
使用这个类:
首先要引入头文件:
#import "Rectangle.h" //实例化一个类,直接调init函数 Rectangle *rect = [[Rectangle alloc] init : (NSString *) @"正方形" : (NSString *) @"红色" : (int) 50]; [rect getArea];//调用方法