k哥的IOS开发学习笔记

原创 2012年03月24日 16:21:31



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

 

一. 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~~~

 


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

IOS开发学习笔记之数据存储

++ 数据存储++ ios中常用的持久化数据的方法: 1、属性列表:Xcode的Property List;再序列化到文件中,使用NSString、NSArray或NSDirectory等的wri...

ios开发学习笔记(这里一定有你想要的东西,全部免费)

1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用)。 其实在代码里还是可以设置的,那就是删除背景vie...

ios开发学习笔记--数据持久化之数据库(SQLite.swift)和FMDB

数据持久化之SQLite数据库(SQLite.swift使用) 一、     简介 SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了。它的处理速...

IOS开发学习笔记(四)——使用TableView

这一小节我们演示如何处理一个列表型的数据。 我们在界面中添加一个TableView;紧接着添加一个plist类型的文件,可以通过New File->Resource->Propert...

iOS开发学习笔记一 —— CocoaPods

最近在看唐巧先生著的《iOS开发进阶》,此内容摘自此书,为方便个人记录与学习 CocoaPods的安装 Mac下自带Ruby,直接使用ruby的gem命令即可下载安装 $ sudo gem...

IOS开发学习笔记(二十二)——ObjectC语言难以理解的概念汇总

这篇文章将会对ObjectC语言中比较难理解的概念进行汇总,帮助我们更好的进行iOS开发。 方法 我们首先看一个很简单的方法代码: - (id)dequeueReusableCellWithIde...

iOS开发-学习笔记

记录一些常用和不常用的iOS知识点,防止遗忘丢失一、调用代码使APP进入后台,达到点击Home键的效果。 [[UIApplication sharedApplication] performSel...

ios开发学习笔记(这里一定有你想要的东西,全部免费)

1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用)。 其实在代码里还是可以设置的,那就是删除背景view ...

iOS开发学习笔记之swift3.0几种加载网络图片的方法

swift3.0加载网络图片
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)