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开发-Swift-基础知识学习笔记

  • 2017年04月25日 11:34
  • 33KB
  • 下载

IOS开发之MapKit学习笔记

MapKit学习笔记      1、概述 插入MapView,设置Delegate(一般为Controller),Annotations记录兴趣位置点(AnnotationView用来显...

iOS开发学习笔记之UILabel的使用

iOS开发学习笔记之UILabel的使用 // 1、创建 letrect:CGRect=CGRectMake(100,100,100,100) letlabel:UILabel=UILabel(...

IOS开发之路-C 学习笔记7.10

今天刚到这边,早上班主任介绍了下自己以及老师等情况. 下午做了自我介绍. 其中有一项我最难忘的事.想了半天还是我父亲和我的事吧.感情方面的事不想多提.而且时间会忘掉的. 第一天就在课下写了一些简单C程...
  • joyoing
  • joyoing
  • 2013年07月14日 11:51
  • 525

IOS开发之OC学习笔记(下)

该笔记源自本人对一个网络视频的学习 百度网盘链接 ,密码: tp3a 如有侵权,请联系本人删除。 都是比较基础的OC知识,中高级开发者可以忽略本文 很多重要内容在代码注释中 1. Fo...

iOS开发者的Java学习笔记

iOS开发者的Java学习笔记_ ^ _ ^ _ 本篇笔记主要记录了JavaSE的学习。 目录 Java概述 Java数组与字符串 类与对象 面向对象 Java概述:Java分为三个体系:> ...
  • IOSAFei
  • IOSAFei
  • 2016年11月13日 20:20
  • 663

iOS开发学习笔记(一)

一、必要条件 1、一台运行Snow Leopard(os x 10.6.5或者更高版本)的基于Intel的Macintosh计算机。 2、注册成为iOS开发人员,下载iOS SDK。 ...

IOS开发学习笔记(十五)——检查设备能力

在实际开发过程中,在使用某项功能前我们需要对设备的支持能力做一些检测。例如,我们要使用相机之前需要确定设备有相机(例如iPod就是没有相机的)。下面针对这些能力的检测分别给出小例子: 检测相机 代...

iOS开发学习笔记 2-3 C语言部分 控制流

一、代码块 使用{}括起来的代码,就可以称为一个代码块,代码块可以由一条件或多条语句组成,多条语句是一个整体; 语句以;号结束,一条语句是一个整体。 二、控制流 1...
  • lboboby
  • lboboby
  • 2014年04月21日 10:22
  • 796

iOS开发学习笔记③ - 视图控制器

视图控制器视图控制器是UIViewController类或其子类的对象。 每个控制器都负责管理一个视图层次结构,包括处理视图相关用户事件,以及将整个视图层次结构添加到应用窗口。以下以建立一个控制视图...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:k哥的IOS开发学习笔记
举报原因:
原因补充:

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