`
leili
  • 浏览: 174996 次
社区版块
存档分类
最新评论

k哥的IOS开发学习笔记

 
阅读更多



本笔记不断更新, 欢迎关注和转载, 和大家一起进步。

一. object c及其他基本概念:

1) Object -C使用#import代替#include

2) Object -C预设文件后缀名是.m, Object c++的后缀是.mm

3) 类的声明和定义:

声明:@interface Class: Parent {} @end

实现: Implementation以@implementationClassName开始,以@end 结束

4) 协议protocol: 类似java的interface或c++的纯虚类

声明:@protocol ProtocolName (methods you mustimplement)@end

调用某个protocol的方法: @interface SomeClass<Protocol 1, Protocol 2>

实现:不需要在头文件的methods列表。 直接在.m文件里实现它既可。

5) 属性property:由编译器来自动实现属性的获取/设置方法。

声明: @property(nonatomic,retain) UIButton*button;

综合: @synthesize button;

6) 对象的创建和释放:你创建的对象,都要负责释放,否则就会导致内存泄露。默认有个init()方法。 也可以自己实现init方法,初始化一些变量。

初始化:

- 简单方法:Object* object = [[Object alloc] init];

- 参数方法:Object* object = [[Object alloc]initWithArgument:argument];

释放: [object release];

7)应用程序委托: 一个应用程序委托应能完成如下工作:

1) 启动时,必须能创建应用程序的窗口并向用户显示(applicationDidFinishLaunching)。

2) 必须能初始化数据

3) 必须能响应"quit退出"请求(dealloc)

4) 必须能处理低内存警告(applicationDidReceiveMemoryWarning)


二. IOS程序的性能和响应速度优化建议

1) 不要阻塞主线程
将网络请求之类的任务放到后台线程运行
2 ) 有效地使用内存
3) 减少应用程序的内存印迹
- 消除内存泄露:Instruments可以用来跟踪代码中的泄露
- 使资源文件尽可能小
- 使用Core Data或SQLite来处理大的数据

- 延缓装载资源(lazyloadng)

- 将程序连编为Thumb格式:加入-mthumb开关可以将代码的尺寸减少最多达35%。但是,对于具有大量浮点数运算的代码模块,请务必将这个选项关闭,因为对那样的模块使用Thumb反而会导致性能的下降。

4) 恰当地分配内存

- 减少autorelease的使用,多使用release

- 为资源设置尺寸限制

- 避免无边界的问题集
5) 浮点数运算的考虑
如果代码中有大量的浮点数运算,就不要用-mthumb选项来编译代码
6) 减少电力消耗

- 关闭当前未被使用的硬件功能,比如GPS, 加速器等
- 避免需要轮询的工作,因为轮询会阻止CPU进入休眠状态。您可以通过NSRunLoop或者NSTimer类来规划需要做的工作,而不是使用轮询。

- 尽一切可能使共享的UIApplication对象的idleTimerDisabled属性值保持为NO。当设备处于不活动状态一段时间后,空闲定时器会关闭设备的屏幕。如果您的应用程序不需要设备屏幕保持打开状态,就让系统将它关闭。如果关闭屏幕给您的应用程序的体验带来负面影响,则需要通过修改代码来消除那些影响,而不是不必要地关闭空闲定时器。

- 尽可能将任务合并在一起,以便使空闲时间最大化。每隔一段时间就间歇性地执行部分任务比一次性完成相同数量的所有任务开销更多的电能。间歇性地执行任务会阻止系统在更长时间内无法关闭硬件。

- 避免过度访问磁盘。举例来说,如果您需要将状态信息保存在磁盘上,则仅当该状态信息发生变化时才进行保存,或者尽可能将状态变化合并保存,以避免短时间频繁进行磁盘写入操作。

- 不要使屏幕描画速度比实际需求更快。从电能消耗的角度看,描画的开销很大。不要依赖硬件来压制应用程序的帧率,而是应该根据程序实际需要的帧率来进行帧的描画。

7) 联网操作的省电优化

联网是最耗电的操作,应遵循以下原则让网络访问最小化:

- 仅在需要的时候连接外部网络,不要对服务器进行轮询。

- 当您需要连接网络时,请仅传递完成工作所需要的最少数据。请使用紧凑的数据格式,不要包含可被简单忽略的额外数据。

- 尽可能快地以群发(inburst)方式传递数据包,而不是拉长数据传输的时间。当系统检测到设备没有活动时,就会关闭Wi-Fi和蜂窝无线信号。您的应用程序以较长时间传输数据比以较短时间传输同样数量的数据要消耗更多的电能。

- 尽可能通过Wi-Fi无线信号连接网络。Wi-Fi耗电比基带无线少,是推荐的方式。

- 如果您通过CoreLocation框架收集位置数据,则请尽可能快地禁止位置更新,以及将位置过滤器和精度水平设置为恰当的值。Core Location通过可用的GPS、蜂窝、和Wi-Fi网络来确定用户的位置。虽然Core Location已经努力使无线信号的使用最小化了,但是,设置恰当的精度和过滤器的值可以使Core Location在不需要位置服务的时候完全关闭硬件。

8) 代码优化
模拟器提供的优化工具可以用来消除内存泄露以及排除由低效算法引起或已知瓶颈引起的计算热点。 但在真机上运用Instruments进行优化才是程序发布前完全优化的唯一方式。


三. 经验总结

1)Objective-C++中,可以用C++代码调用方法也可以从Objective-C调用方法。在这两种语言里对象都是指针,可以在任何地方使用。例如,C++类可以使用Objective-C对象的指针作为数据成员,Objective-C类也可以有C++对象指针做实例变量。

注意:Xcode需要源文件以".mm"为扩展名,这样才能启动编译器的Objective-C++扩展。

OC++没有为OC类增加C++的功能,也没有为C++类增加OC的功能。不能互相继承

小结如下:

.m 文件可以混合c 和 objective-c 代码。

.mm 文件可以混合 c c++ objective-c 代码。

.c、.cpp 不能混合有objective-c 代码

2)编译静态库和使用

- 创建一个project, 类型是 Cocoa Touch Static Library

- 调用libstatic.a的方法:

Search Paths > Header Search Path > ../libstatic/**

加入libstatic.a:Build Phases的Link Binary With Library

-注意lib project的target是IOSDevice还是emulator.前者是arm7,后者是i386,不能混用。不过可以用lipo打包成一个.a文件


to be continued~~~


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics