Objective-C 部分
OC 是C的子集,是面向对象程序设计语言
语法上基于SmallTalk-80
OC可以与C、C++代码混合编写
入口函数与C相同都是 int main(int argc, const char*argv[]) 形式
c语言的基本概念与语法在OC中同样适用
OC中定义函数形式
函数类型 (返回类型) 函数名称:(参数类型) 参数 参数名称:(参数类型) 参数...;
示例
-(void) Fun1;
-(int) Fun2:(int) n
+(void) Fun3:(int)n ValueName:(int) value;
其中 "-" 实例方法 "+"类方法。
调用形式
[object Fun1];
[object Fun2:?];
[object Fun3:? ValueName:?];
OC中类定义
@interface ClassName : ParentClassName (NSObject)
{
// 成员变量定义
int n;
int x;
int y;
}
// 成员函数定义
-(void) TestFun:(int)n;
@end
OC中类实现
@implementation ClassName
-(void) TestFun:(int)n
{
}
@end
// 调用
int main(int argc, const char*argv[])
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
ClassName* obj = [[ClassName alloc] init];
[obj TestFun:?];
[obj release];
[pool drain];
}
与传统C区别点
#import 代替 #include
NSLog(@"") 输出到控制台
BOOL 值 使用YES NO
对象自引用使用 self关键字
空值使用nil宏
具有一个通用对象类型id
getter setter 使用特定方法实现
调用函数或发送消息形式
[]
例[self setName:@"Name"];
也可以使用"."
例
self.name = @"Name";
oc中类的继承方式是单继承,但可以定义多个协议(接口)
oc中可以进行类扩展,可以给已有类增加成员方法
内存管理方面,一可以使用NSAutoreleasePool定义内存池来管理对象,二使用引用计数进行保持或销毁对象。
getter setter 使用特定方法实现说明
在OC中可以不直接写GetXXX 或 SetXXX方法进行获取值或存储值,其方法大体过程如下:
头文件中
// 变量定义部分做如下定义
1.int n;
// 成员变量定义外做如下访问属性声明
2.@property int n;
类实现文件中,
// 实际生成getter setter 方法
@synthesize n;
做以上操作后程序已经具体 GetN 和SetN的访问能力。
除此之外还有 readwrite, readonly, nonatomic, retain, copy, assign 关键在@property 中使用。
@property是一个属性访问声明,扩号内支持以下几个属性:
1,getter=getterName,setter=setterName,设置setter与getter的方法名
2,readwrite,readonly,设置可供访问级别,readwrite是默认访问级别,readonly 只会生成getter方法。
2,assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题
3,retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序
4,copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再Copy出新的对象,retainCount为1。这是为了减少对上下文
的依赖而引入的机制。
5,nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。
OC 协议
协议是多个类共享的一个方法列表,其中方法没有实现,由引用协议的类进行实现。定义如下:
@protocol MyInterface
-(void) interface1;
-(void) interface2;
@optional // 这个关键字下面的方法类中可选实现
-(void) interface3;
-(void) interfacen;
@end
引用协议
@interface MyClass:NSObject <MyInterface>
{
}
@end;
引用协议实现
@implementation MyClass
-(void) interface1
{
}
-(void) interface2
{
}
-(void) interfacen
{
}
@end
分类说明
OC中分类可以给现有类增加新的方法
例给NSString 增加连接字符串方法
分类定义:
@interface NSString(ConnectString)
-(NSNumber*) len;
@end
分类实现:
@implementation NSString(ConnectString)
-(NSNumber*) len
{
int Len = [self length];
return [NSNumber numberWithInt:Len];
}
@end
这样在没有NSString 源码情况,不需要继承而进行类功能的扩展。
内存管理方面
一、自动释放池
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
在创建对象时 调用autorelease方法,该对象释放与销毁由 释放池管理,而该对象不再需要手工 release 操作
内存池释放
[pool drain];
二、引用计数
OC使用引用计数机制管理对象,当创建对象时,其引用计数为1 使用 retain 方法计数加1 release 计数减1
retainCount 可以获取当前对象的引用计数。
由对象的引用计数为0时,系统认为该对象不再被需要,则释放其内存空间。
OC内存管理规则
release 方法并不真正销毁对象,它只是计数减1当,对象的引用计数为0时才由系统发送一条dealloc 消息去释放它所占内存空间
如果手工创建对象,则需手工释放
使用autorelase方法的对象,由内存池管理,不需要手工释放
如果未明确手工创建对象,则不需要去手工释放
如果有retain操作,则应用有对应的 release 或 autorelease
Foundation 框架部分
包括常用的类有
NSNumber
NSString
NSDate
NSData
NSArray
NSDictionary
NSMutableString
NSMutableArray
NSMutableDictionary
NSSet
NSFileHandle
NSFileManager
iPhone 开发重点
动画效果
照相机功能
地图功能
定位功能
加速计
手势
音频视频
通讯
我会基于目前大体脉络慢慢加入更新