2010-11-30 iPhone 学习笔记

Objective-C编程入门
本文介绍Objective-C的基础知识,包括语法特点、类定义与实现、内存管理等,并涉及协议、分类等高级特性。

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

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

通讯

 

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

【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器模拟器的研究展开,重点介绍了基于Matlab的建模与仿真方法。通过对四轴飞行器的动力学特性进行分析,构建了非线性状态空间模型,并实现了姿态与位置的动态模拟。研究涵盖了飞行器运动方程的建立、控制系统设计及数值仿真验证等环节,突出非线性系统的精确建模与仿真优势,有助于深入理解飞行器在复杂工况下的行为特征。此外,文中还提到了多种配套技术如PID控制、状态估计与路径规划等,展示了Matlab在航空航天仿真中的综合应用能力。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程技术人员,尤其适合研究生及以上层次的研究者。; 使用场景及目标:①用于四轴飞行器控制系统的设计与验证,支持算法快速原型开发;②作为教学工具帮助理解非线性动力学系统建模与仿真过程;③支撑科研项目中对飞行器姿态控制、轨迹跟踪等问题的深入研究; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注动力学建模与控制模块的实现细节,同时可延伸学习文档中提及的PID控制、状态估计等相关技术内容,以全面提升系统仿真与分析能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值