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

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

通讯

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值