2010-11-30 iPhone 学习笔记

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 开发重点

动画效果
照相机功能
地图功能
定位功能
加速计
手势
音频视频

通讯

 

我会基于目前大体脉络慢慢加入更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值