一、语言基础
1、注释Object-C 中的注释 和 c++ 一样为 // 单行注释, /**/ 多行注释
2、包含头文件 用 #import<系统库头文件> #import "自己的头文件"
3、类
3.1 类的申明
@interface 类名: 父类名 <遵循的协议1, 遵循的协议1>
{
@public
@private
@protected
数据成员
}
-(返回类型) 实例函数名 :(参数一类型) 参数名;
+(返回类型) 类函数名 : (参数一类型) 参数;
@end
3.2类的实现
@implementation 类名
+(函数返回值) 类函数名:(参数类型) 参数名
{
函数实现;
}
-(函数返回值) 实例函数名:(参数类型) 参数名
{
函数实现;
}
@end
3.3 对象实例化和初始化
类名 *对象名 = [类名 alloc]; //实例化一个对象
[对象名 init]; //初始化对象
上面两个操作可以缩写为
类名 *对象名 = [[类名 alloc] init]; //实例化一个对象并初始化。
3.4 对象释放
//创建的对象要记得释放否则就会导致内存泄露
[对象名 release];
3.5 对象方法的调用
//object-c 中对象方法的调用被称作向消息接受体发送消息具体使用方法为
[消息接收体 消息名];
3.6 对象成员数据的访问
实例对象的数据成员默认是 @protected 权限的。
1、自定义方法获取/设置 成员数据
对数据成员的访问可以通过对象的成员方法,object-c 中成员方法和成员数据的名字是可以相同的。
2、通过 存取器方法,自动生成 获取/设置 成员数据方法
2.1 在类申明部分将实例变量 通过 @property 指令标识属性
2.2 在类实现部分 通过 @synthesize 指令定义
example:
@interface TestClass : NSObject
{
int member;
}
@property int member;
@end
@implementation TestClass
@synthesize member;
@end
通过这个方法就自动生成了 member 的 set 和 get 方法。
#import <Foundation/Foundation.h>
@interface TestClass : NSObject
{
int Value;
}
@property int Value;
@end
@implementation TestClass
@synthesize Value;
@end
int main(int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
TestClass *a = [[TestClass alloc] init];
//[a setValue: 10];
NSLog(@"Hello world!! %i", [a Value]);
[pool drain];
return 0;
}
3.7 self 关键字,super 关键字
self 关键字相当于 c++ 中得 this
super 关键字代表类的父类。
3.8 对象初始化
3.9 对象释放
重载 NSObject 中得 dealloc 方法实现释放对象中实例化的对象,防止内存泄露
需要注意的是在重载了 dealloc 方法时还是要记得调用父类的 dealloc 方法释放父类的对象释放操作。
3.10 分类(通过分类为类扩展功能)
@interface 已有类类名 (分类名)
-(返回值类型) 扩展方法名:(参数类型) 参数名;
@end
@implementation 已有类类名 (分类名)
-(返回值类型) 扩展方法名:(参数类型) 参数名
{
方法实现;
}
@end
注意: 1、分类只可以访问原类的成员变量,不能增加。
2、分类可以重载原类的方法,但是这种设计是不合理的(这么做了后原来的方法就访问不到了)。重载类的方法应该通过继承实现(这样还能通过 super 访问到原来的方法)。
3、可以创建很多分类。
4、分类不一定要实现申明的方法。可以只是先申明但是不实现。
3.11 协议
协议用来规范接口的。相当于c++ 中得抽象基类,java 中得interface 接口。
@protocol 协议名
-(返回值类型) 方法名:(参数类型) 参数名;
@end
4、数据类型和表达式
object-c 中的基本数据类型和c基本一致:(其中比较特殊和关键的类型为 id 它可以存储任意类型的数据它使objectc 实现多态的关键)