文档介绍:分享人:李航(酷酷)
/lidaohang
欢迎大家参与"爱疯了"技术交流分享
2
-C简介
欢迎来到Objective-C的领地! 本文将介绍Objective-C的历史,以及相关特性和概要简介。
1983年,Objective-C诞生了。
1985年,Next公司使用Objective-C开发出了nextstep操作系统
1997年,apple收购了Next公司,在nextstep基础上,开始设计Mac OS。
2001年,apple正式发布Mac OS X
2007年,apple发布iphone..................
Objective-C: 一种面向对象的语言标准c语言的一个超集,使用的是smalltalk风格单继承,每个类最多只有一个父类动态运行,大部分都是工作时才知道
Objective-C不同于C++: 不支持操作符重载,模版和多重继承。
3
-C与C++
每个Objective-C对象都隐藏着一个数据结构,它的第一个成员变量或者说实例变量是"isa"指针。 isa指针指向的是对象的类,这个类也是一个对象,有自己的权限,是根据类的定义编译而来的。类对象负责维护一个方法调度表,该表实际上是由指向类方法的指针组成的。类对象中还保留一个超类的指针,该指针又有自己的方法调度表和超类。 isa指针对消息分发机制和cocoa对象的动态能力很重要。
C++ 与Objective-C最大的区别在于分配方法的机制不同,C++ 是基于虚拟表机制确定虚函数调用什么代码,而Objective-C 使用运行时,函数进入各种类结构中查找相应的代码以供调用。这么一比,很明显 C++ 的效率要高的多,正因如此,我们要明确的是,Objective-C 牺牲了一定的速度和安全,换来了灵活和便捷,这是一种权衡利弊的做法。
4
3. 常见语法说明
#import “文件名”或者#import < 文件名>的形式以确保每个头文件仅被包含一次。
***@interface类名:继承类开头,以***@end 结尾,类实现以***@implementation类名开头,以***@end 结尾。
,即成员方法,在方法名前面添加一个减号(-);类方法,在方法名前面添加一个加号(+) 。
[类名类方法],成员方法调用格式为[实例名实例方法],这种模式在ObjC 中被称为消息机制,[ 对象消息]即给对象发送了一个消息,产生的效果就是该对象调用了该类中定义的对应的实例方法。
: NSString *aString;
***@protocol IQuery
-(void) Query:(NSString*) sql;
***@end
5
头文件:
#import <Foundation/>
***@interface MemFoo: NSObject
{
//属性
int x;
NSString* name;
}
***@property int x;
***@property (copy) NSString* name;
-(MemFoo*)init:(int) n:(NSString*)str; //重载NSObject类初始化方法
***@end
6
实现类:
***@implementation MemFoo
***@synthesize x;
***@synthesize name;
//重载的实现
-(MemFoo*)init:(int)n:(NSString*)str
{
self=[super init]; //先使用父类方法进行初始化
if (self!=NULL) {
=n;
=str;
}
return self;
}
***@end
调用该类:
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
MemFoo* myMem=[[MemFoo alloc]init:5:@"hello"];
[myMem release];
}
7
:
***@property 类型名字
属性主要分为三类:
1. 读写属性(readwrite/ readonly)
2. Setter属性(assign/retain/copy)
3. 原子属性(atomicity/nonatomic)
如果属性是对象类型,你需要使用retain,assign,copy参数,表示setter方法内部实现的时候,持有对象的方式。其