《objective-c 基础》笔记1
1.#import
#import 是GCC编译提供的,Xcode在编译Objective-c,c和c++程序时都会使用它。它可保证头文件被包含一次,而不论此命令实际上在那个文件中出现了多少次。
相当于c语言中的#ifdef命令
2.NSLog和“@”
NSLog(@"hello,Ojbective-c!"),接受的字符串可包含格式说明符(如:%d)
整体功能类似于java的println(),c的printf() 函数
注:已“ns”开头的函数说明是来自Cocoa而不是其他工具包。
字符串前的“@”标识引用的字符串应该作为Cocoa的NSString元素来处理。
3.布尔类型
BOOL:YES\NO (1 or 0)
4.@interface
@interface Circle:NSObject //接口名为:Circle,Circle类是基于NSObject 类得,每个Circle都将继承NSObject类得所有行为
{
ShapeColor fillColor;//数据成员之一,属于ShapeColor类型
ShapeRect bounds;//数据成员之二,属于ShapeRect类型(fillColor,bounds 这两个的值称为Circle类对象的“实例变量”)
}
//方法声明模块 start
- (void) setFillColor:(ShapeColor) fillColor;//方法名是:setFillColor:,冒号是名称的一部分,告诉编译器后面会有参数;参数类型是:(ShapeColor),参数名称是:fillColor
- (void) setBounds:(ShapeRect) bounds;
- (void) draw;
//方法声明模块 end
+(NSString*) className; //类方法
@end //Circle
方法返回类型:标准类型(整型、浮点型、字符型)、指针、对象引用、结构
减号 –
代表此方法是实体方法,必须先生成类实例,通过实例才能调用该方法。
加号 +
代表此方法是类的静态方法,可以直接调用,而不用生成类实例。
5.@ implementation
@ implementation Circle
- (void) setFillColor:(ShapeColor) c
{
fillColor = c;
}//setFillColor
- (void) setBounds:(ShapeRect) b
{
bounds = b;
}//setBounds
- (void) draw
{
NSLog(@"drawing a circle at (%d %d %d %d) in %@",
bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor));
}//draw
@end //circle
备注:接口实现类中可以定义接口中无相应声明的方法,可以不他们看做私有方法仅在类得实现中使用,也可以从该实现之外访问该方法,这是OC动态本质的副作用
6.实例化对象
int main(int argc, const char * argv[])
{
id shapes[1];
ShapeRect rect0 = {0,0,10,30};
shapes[0] = [Circle new];
[shapes[0] setBounds:rect0];
[shapes[0] setFillColor:kRedColor];
drawShapes(shapes,1);
return (0);
} // main
7.继承
注意:oc不支持多继承
继承实例:
@interface Shape:NSObject //Shape 继承自NSObject
{
ShapeColor fillColor;
ShapeRect bounds;
}
-(void) setFillColor :(ShapeColor) fillColor;
-(void) setBounds: (ShapeRect) bounds;
-(void) draw;
@end //Shape
@implementaion Shape
-(void) setFillColor :(ShapeColor) c
{
fillolor = c;
}
-(void) setBounds:(ShapeRect) b
{
bounds = b;
}
-(void) draw
{
}//draw
@ end
@interface Circle:Shape
@end // Circle
@implementation Circle
-(void) draw
{
NSLog(@"drawing a circle at (%d %d %d %d) in %@",
bounds.x,bounds.y,
bounds.widt,bounds.height,
colorName(fillColor));
} //draw
@end //Circle
备注:super关键字 (需要超类实现自身功能,同时在前面或后面执行某些额外的工作)
@implementation Circle
-(void) setFillColor:(ShapeColor) c
{
if(c==kRedColor)
{
c == kGreenColor;
}
[super setFillColor:c];
}// setFillColor
@end //Circle