ios开发指南-第1-3章

前言:

学完了底层c,c++之后,现在开始重新回头进行上层的界面设计。既然做了就要做好,就如同过去c,c++做的一样。过去的一年的时间精看了深入浅出mfc,C++程序设计语言,effective-c++,GOF和大话设计模式,粗看了more effective c++, c++ premier,linux程序设计,harly guide linux, 自觉在c++方面的战果还算不错,现在重新捡起刚从事半年多的ios,一方面是因为money,另一方面是因为过去确实底层能力不行,对于界面处于知其然而不知其所以然的状态,现在重新看起,书籍一定是必需品了。买了两本书,ios开发指南和ios设计模式解析。这一段博客主要记录书籍的学习过程,还有过去的未竟的任务,将好的思想,好的策略浓缩一下便于为我所用。

ios开发指南

国人写的书,一直对国人的技术书籍有种抵触情绪,不过看这本书的目录结构比较适合我,于是放弃了精通ios开发那本而选择了这本。这本书有点太厚了,接近700页,拿在手上不适合,太重,讲的东西多,但是不算杂,各项均有涉及,有个别错误,内容不算高深,适合我这样的小半桶水看。ios设计模式解析是没有时间看了,先让它睡着吧,把基本的捡起来以便于自己好迅速的上手公司的代码,要不然以后工作有我受的了。

第一章

xcode简介,书籍图片,内容介绍,书中源码链接。没啥有太大意义的内容。

第二章

应用程序的生命周期值得读一读。

打开程序: Not Run (applicationDidFinishLauch) -> InActive (ApplicationDidBecomeActive)-> Active

程序后台: Active (applicationWillResignActive) -> InActive -> Backgroud (applicationDidEnterBackgroud)-> Suspend (applciationWillTerminate) -> Terminate

挂起运行: Suspend -> Backgroud (applciationWillEnterForgroud) -> InActive (applicationWillBecomeActive) -> Active

当系统内存不足的时候,后台的Suspend程序有可能会被系统kill掉,没有通知。

视图的生命周期

loadView(得到一个view) -> ViewDidLoad(在生成的view后添加subview以进行自我的定制) -> ViewWillAppear -> viewWillDisappear -> didReceiveMemoryWarnning (收到内存警告) -> viewDidUnLoad

loadView是为了创建self.view,当从nib文件中去加载就会直接创建self.view,因此loadView也就不需要了。

Xcode的project和target

一个project对应这多个target,project的设置是公共的,target的设置可以覆盖project的设置。在target的summary选项下,设置屏幕图标57*57, Icon.png,retina屏幕为[email protected], 启动屏幕为320*480,Default.png或者retina屏幕为[email protected], 设备支持选项。

ios Api简介

框架太多,不容易记忆,再说必要性不是很大。注意大的有四个层次: Cocoa Touch, Media, Core Services, Core OS。具体的每一个层次包含什么,暂时不关心。还有如何使用帮助文档,alt+鼠标点击-》打开帮助文档

第三章 基本的设计模式

ios常用设计模式,这个我比较擅长,相对就简单多了。

单例模式

没有使用synchronized机制,使用gcd的一种dispatch_once机制来维护仅仅执行一次的操作,比加锁效率高一些,至于内部原理,暂时不懂,不过以后会搞定它的底层的。来个简单代码示例便于以后copy

@interface Singleton : NSObject

@end

@implementation Singleton

static Singleton *_shareSingleton = nil;

+ (Singleton*) sharedManager

{

static dispatch_once_t once;

dispatch_once(&once, ^{

_shareSingleton = [[Singleton alloc]init];

//...... your other initial code here

}

);

return _shareSingleton;

}

思想很简单,私有静态指针,类方法中分配内存并返回这个指针。为了防止多线程同时访问可能会创建几个对象,可以采用加锁,为了提高效率,有一种二次探测的策略;这里采用的GCD的内容保证只执行一次。

示例: UIAccelerometer NSUserDefault NSNotificationCenter等等。

委托模式

我比较挠头的一种模式,说起来就是我定义了一个框架,但是又想给使用者以个性化的操作,于是将个性化的操作提取出来,制作成协议,让客户去实现协议。举个UITableView的例子, ViewController实现UITableViewDelegate协议, viewController持有一个UItableView的指针,设置tableView.delegate = self。这样tableView相当于将个性化的操纵留给了ViewController去完成了。

简单类图:

UITableViewDelegate

|

|

UITableView (持有delegate指针)------------->MyViewController(持有tableView指针,并设置delegate)

MyViewController继承delegate同时持有tableView的指针,这个是一个强引用。UITableView也持有一个delegate指针,由于这个指针最终要赋值为MyViewController对象,因此为了避免循环引用,一定是一个弱引用。一般是在MyViewControlller中设置tableView.delegate为自身,也就是说MyViewController负责实现delegate方法。这样UITableView自身实现了TableView的基本框架,同时将用户的个性化的可扩展的地方弄成协议供客户实现。协议的调用肯定是UITableView内部框架去做的,它需要数据的时候就去协议要数据,协议呢给用户以最大的扩展性,同时用户有不用关心UITableView具体的内部是如何呈现了,用户只需要提供数据就行了。示例 UITextField Application

观察者模式

相当简单的一种设计模式,但是又相当常用。一定要记住一个Subject,n多个Observer。Subject需要实现addObserver,removeObserver,notifyAllObservers的方法,同时有一个observers数组保存所有的observer;observer需要实现update方法。当需要更新数据的时候,调用notifyAllObservers方法,这个方法中遍历数组的所有observer,调用observer的update方法去更新数据。通知中心就是一个subject,为了方便使用它以单例模式实现的,后面有空要实现一个通知中心,让自己理解更深刻一些。

KVO也是一种观察者模式,KVO会自动给Subject类创建一个子类,然后将Subject类的isa指针指向派生类.在派生类内部添加通知观察者的代码,需要使用setValueForKeypath的方式,因为这种方式的派生类内部才添加了notifyObserver的方法。添加属性观察的Subject需要调用addObserver方法来添加观察者,当属性改变,观察者的ObserverForKeyPath会呗调用。这个有空也实现一个,应该不算复杂,主要是内部机制自己理解还不是很透彻。

MVC模式

Cocoa中的MVC的模型和视图没有任何交互,全是通过中间人ViewController交互的。

ViewController持有很多View的对象指针(IBOutlet),因此可以直接操纵view,view可以通过委托和协议的机制将操作反馈给ViewController,还有button的回调(IBAction)也可以反馈到Controller。

Controller也一般持有model的指针,可以直接更新model数据;model数据可以使用Notification和KVO机制将model的更改通知给Controller。上面的这几个策略基本上概括了整个MVC的东西,斯坦福公开课有一个图片很好,大家值得一看。

ios开发指南-第1-3章

OK,就到这里吧,得回家了,太晚了,明天继续写。

分类:默认分类 时间:2012-01-05 人气:6
本文关键词:
分享到:

相关文章

  • QQ演出 发暗号得Q币 99%获奖率 最多可得2Q币(安卓 IOS均可) 2012-01-01

    QQ演出 发暗号得Q币 99%获奖率 最多可得2Q币(安卓 IOS均可) 很简单的活动 我们看下说明 第一步,要先获得资格。如图,写上验证码,点击 我要Q币 然后下载 活动时间:9月7日—10月30日 (注:以前参加过这个活动的就不能参加了) iPhone和android用户只要下载并安 装手机版QQ看演出,点击"我要Q币"获取资格,然后到手机版QQ看演出的"更多"→"意见反馈"写下暗号(支持QQ看演出)或直接写下反馈意见,就可以获得1Q币!QQ会员获得2Q币!99%获奖率!(活动期间,同一手

  • IOS某游戏作弊一秒钟上GameCenter头一名(修改金钱.分数等) 2012-01-02

    IOS游戏开发者请注意 是我无聊翻ifile翻到的 Library/Perferences/com.oneleaf.ninjamustdiecn.plist 什么都写在这个文件里 什么金钱啊 最高记录啊 然后我改了个最高记录 看下game center 呵呵呵 我也是世界冠军了~~~ 修复方案: 加个密把

  • iOS应用Evomail 手势操作管理邮件更方便 2012-01-02

      还在为Mailbox需要排队而心烦吗?还在为现在的邮件应用处理邮件的过程繁琐而愤怒吗?抛开这一切,看看App Store中存在一颗明珠Evomail,它的实用性让我和我的小伙伴们又一次震惊了。   Evomail是一款邮件应用,它的许多特性都与Mailbox和Dispatch相类似,但却更胜一筹。因为它有许许多多的闪光点,例如增添文件夹的功能。令人欣慰的是,Evomail不仅支持Gmail账户登录,还支持iCloud账户和雅虎账户进行登录,这十分适合每个人。   上周Evomail迎来了一次

  • iOS和Android将在良性竞争中互存 2012-01-03

      苹果推出iPhone 4S。图/CFP   三星可弯曲屏幕概念机   Natali概念机   Kambala概念机   Windows概念机   “苹果风光将长久依旧!”,iPhone的最大竞争对手Android阵营显然不这么看。Android由Google推出,而Google董事长施密特前不久刚刚发表了对智能手机大战的见解,他表示,实际上在苹果的系统(iOS)和Android之间的竞争还会继续存在下去,而且这种竞争是非常良性的竞争。它能够把我们的价格降低,而且会把更多的投资带到市场上。目前

  • 体验云编程--IOS脚本学习门户 2012-01-04

    云编程 云编程,浏览器打开就能够进行代码的编写运行,用户体验媲美桌面IDE的代码编辑器。 l 在线代码编写,代码高亮显示,函数自能感知提示 l 在线代码直接运行,控制台输出 l 支持代码断点变量查看 l 常用函数文档查阅 IOS脚本概述 新版的IOS脚本引擎进行了重大的更新,语法更接近js。 目前IOS脚本引擎主要应用在服务端业务逻辑的控制、UI显示逻辑的控制、前后端交互的调度控制,其中的表达式子引擎还应用在表单、报表、流程的处理。 脚本是非常好的粘合剂,通过调用业务化封装的脚本函数可以很容易地

  • iOS study Day14-浅复制 2012-01-05

    这是一个很有趣的问题,在Car2复制时候,CAR2的引擎复制了几次?为什么? 这个问题涉及到深浅复制,属性的应用,以及内存的整理等多方面。结果很有趣,答案是三次。 #import #import "Car.h" int main(int argc, const char * argv[]) { @autoreleasepool { Car *car = [[[Car alloc] init] autorelease]; NSLog(@"%@", car); Car *car2 = [car co

  • 5.11升级 iOS 6后各种体验分享 2012-01-05

      今日,iOS 6 终于开放下载。虽然尚未出完美越狱,但是到现在为止,已有不少用户升级到了 iOS 6。这些早早升级的用户体验过后是怎样的感觉呢?iOS 6 到底有哪些可以吸引我们去升级呢?我们收集了广大网友中一些“吃螃蟹”的网友帖子,看看他们都怎么说。   首先要说明的是,经过对比,用户发现 iOS 6 正式版跟 GM 版本几乎相同,包括版本号、基带都一样,已经是 GM 版的用户可以避开今晚的下载高峰期,过后再升级到正式版。通过 itunes 下载更新的用户,如果感觉下载太慢,可尝试网友“黑

  • "Wirelurker"iOS病毒作者已被刑事拘留 2012-01-06

    据首都网警微博报道,北京市公安局将iOS系统恶意程序的三名制作者抓获,涉案网站被关停。11月初,有研究人员在iOS系统中发现了一个名为Wirelurker的漏洞,可以让iPhone在不越狱的情况下感染病毒,并且有可能已经影响了数十万用户。该漏洞主要通过麦芽地应用商店传播,这是一个来自中国的第三方OS X软件来源。 一旦一台电脑被感染,Wirelurker就会通过USB将其传播到iOS设备,通过替换二进制文件的方式重写既有程序。 不久前,针对此前的第三方Mac商店恶意软件及假面攻击事件,苹果官方给

  • 红雪iOS越狱工具RedSn0w 0.9.10b8发布 增加SAM解锁功能 2012-01-07

    红雪又为我们带来了周末礼物,这一次对于需要解锁的朋友们是非常好的消息,b8版添加支持备份珍贵的SAM解锁后激活码信息。这次增加了SAM解锁的功能,这个漏洞可是中国黑客发现的,国外越狱大神们表示任何,很快就更新到最新版的RedSn0w 0.9.10b8版本当中了。 SAM的作者Sam Binger获悉,立即表示要将自己的SAM改写成一步到位的解锁工具。该工具支持iPhone 3G,iPhone 3GS,iPhone 4和iPhone 4S解锁!据悉,其原理是利用SAM可以更改ICCID以及IMEI

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.024 (s). 10 q(s)