【IOS】深刻浅出iphone/ipad 开发 ...持续更新中

我的吐糟,不喜勿喷!!!--------------------------------------------------------------
ios

不推荐购买该书中文版,做为纯粹的工具书来讲,它已通过时了。 web

做为启蒙教材来讲,书上面处处都是错误,你没看错,就是错误。容易误导初学者。 算法

做为进阶教程来讲,它里面没有任何进阶的东西,固然若是你想来个xcode几日游,能够买来看看。 xcode

总之,到网上下个英文电子版就差很少了,不值得花这80+来块钱,虽然就是吃餐饭的钱。 浏览器

---------------------------------------------------------------------------------------- 服务器

    照样写在开头。网上的各类书籍眼花缭乱,各位大神的推荐也是五花八门,有一个迷恋算法追求完美作ios应用的资深果粉(Y)给我推荐了这本书,TA是个很奇特的人,各类婆妈各类啰嗦,可是给我讲起算法仍是很是通俗易懂,很快就勾起我对大学里面薄弱的专业知识的回忆并加深了理解。关于ios开发,也听TA唠叨了一些,不过这家伙老是会不当心遗忘我是刚刚才开始学习的菜鸟,因而乎,我只能淡定地无视TA的各类唠叨说教加嘲笑。
app

    好吧,TA说这本书好评不少也很简单等等。说白了,就是很适合初学者过一遍。好吧,具体怎样我也不知道,不过我仍是很感谢这个婆妈的人。不过我偶尔会小小怀疑,我会学这个就是由于去年跟TA合做某个项目时被TA荼毒和感染的。
框架

    我要吐糟:请问翻译者,您是把原书丢到google翻译里面直接翻译出来的吗?唉,多好的书啊,不能给翻糟蹋了啊。真是让我又爱又恨啊。
iphone

----------------------------------------------------------------------------------- 工具

建项目中会遇到的问题:

若是非得按照书中彻底同样的走,那确定是走不通的,书是按iphone4来的,如今iphone5S都要出来了,而Xcode的版本也不同了。
譬如,想建立单视图项目,如今对象的项目类型是:single view application。而默认生成的项目文件也没有书中所说的两个xib文件,除非在建立时,去掉 “use storyboards” 前的勾。对于书中反复提到的手动管理内存,则须要在建立项目时,去掉 “use automatic reference counting”前的勾。还有些零零碎碎的就不写了,啰嗦这么多只是给本身一个提醒“书仍是得比对着看”,只看一本两本容易被误导。

interface builder快捷键:

按住commond键,鼠标移动到button左上角/右下角,拖动鼠标,控件几何中心不变,大小按比例缩放。

杂七杂八的英文单词:(待补充)

-----------------------------------------------------------------------------------

【iphone篇章】

一、Simulator(模拟器)的限制(ipad与之相同)

在我彻底不认识xcode的时候,就已经熟悉了ipad模拟器,不过当时都是Y手把手帮我把一切都搞定包括phonegap框架的搭建以后,我直接进行web应用开发。不啰嗦了,菜鸟就应该有菜鸟的姿态。

  • 不支持重力感应、摇动和旋转、多指触控(这些对于游戏开发可能比较纠结)
  • cpu和内存的使用表现与真机有区别(这个我深有体会)
  • 其余如摄像机、GPS、邮件发送等都没法在模拟器上实现

因此,难怪别人说作ios开发硬件成本高,好吧,我如今就缺个iphone了。不过我仍是不后悔去年选择了note2而不是iphone5,^_^。。。攒钱中。

二、ios开发中两种常规委托模式:MVC和VC

MVC:模型-视图-视图控制器

VC:视图-视图控制器

三、IBOutlets 和 IBActions

IB:interface builder的缩写

IBOutlets:对UI对象的引用,代码经过IBouterlet对UI进行修改,如,设置文本框的内容、改变颜色等。
IBActions:绑定到事件上的方法,当事件被触发时响应

四、nib与xib

xib是nib的二进制编码文件。不过,在最新的xcode中,建立项目时,若是用默认的选项,将不会生成xib文件。

MainWindow.xib :根视图。在最新Xcode中,已经不存在这个xib文件。(待研究)
关于该根视图的声明周期问题,见P54-P55,mark!

五、文件全部者(不太理解这个奇怪的概念,待查证原文,总感受翻译的怪怪的,mark)


六、help》Xcode help,帮助手册简单介绍

前缀:c:类(class);pr:protocol(协议)

以UIPickerView 类为例,该空间的文件全部者须要实现的协议有 UIPickerViewDataSource 和 UIPickerViewDelegate

七、应用程序设计法则 - IOS HIG 和 iphone应用程序分类

http://developer.apple.com/ios

HIG将应用程序分为三种主要类型(经常使用于iphone的开发):

  • 引人入胜的应用程序
    特色:如游戏等,会有很是个性化的界面,使用户与设备间达成互动。HIG再也不显得那么重要。要求这个控件提供一个内部一致的体验。
  • 效率应用程序
    特色:帮助管理信息和完成任务。信息是分层的,经过向下延展,进一步细分信息级别。在这一类程序中,因为咱们会使用标准控件,每一个控件都必须彻底符合HIG的各类规则。如,新闻阅读器,食品列表展。
  • 实用应用程序
    特色:获取特定信息给用户,一般比效率程序拥有更多的界面设计,并预期可以与HIG相一致。可能没有任何实际数据工做。如,秒表工具。

上述分类为对书中内容的总结概括,正确性和准确性有待进一步考证,等这本书结束后会去看HIG的。到时候会回头扩充和修改。吐槽下,这本书翻译者的中文语法真让我感到汗颜,各类不通顺啊,唉,还好里面有大量的图解和代码,文字很少。不然我真要崩溃了。不过鉴于本身英语弱而时间紧急,仍是很感谢翻译者的。

八、关于tableView的使用说明

书上提到的给addButton添加action的方法已通过时,由于ios自动生成的MasterView中,已经内置了该按钮,并绑定了对应的方法到该按钮上。

下面是主视图.m文件中的两端代码:(我感谢这本书,教会了我如何调试ios程序。。。)

- (void)viewDidLoad 
{
    [super viewDidLoad];
    
    // new code
    NSString *path = [[NSBundle mainBundle] pathForResource:@"DrinkDirections" ofType:@"plist"];
    _drinks = [[NSMutableArray alloc] initWithContentsOfFile:path];
    
	// Do any additional setup after loading the view, typically from a nib.
    self.navigationItem.leftBarButtonItem = self.editButtonItem;

    // 此处即便按钮的声明,注意,其中的 insertNewObject 就是点击addButton以后执行的方法
    UIBarButtonItem *addButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)] autorelease];
    self.navigationItem.rightBarButtonItem = addButton;
}
// 主视图.m文件中的insertNewObject。被注释掉的是默认生成的代码,后面的打印是个人测试代码
- (void)insertNewObject:(id)sender
{
//    NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
//    NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
//    NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
//    
//    // If appropriate, configure the new managed object.
//    // Normally you should use accessor methods, but using KVC here avoids the need to add a custom class to the template.
//    [newManagedObject setValue:[NSDate date] forKey:@"timeStamp"];
//    
//    // Save the context.
//    NSError *error = nil;
//    if (![context save:&error]) {
//         // Replace this implementation with code to handle the error appropriately.
//         // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
//        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
//        abort();
//    }
    NSLog(@"insertNewObject");
}

九、模式视图是个什么东东?mark

P236提到,经过添加一个模式视图来吸引用户的注意力,该视图会从底部向上滑入,该视图能够在不须要时关闭。该视图不会被push到视图的堆栈中。即,用户不会经过返回按钮回到该视图。

十、Undefined symbols for architecture i386:错误解析

Undefined symbols for architecture i386:这种错误通常是你用模拟器做为目标,但编译的时候找不到相关的库文件,须要作的就是把库文件所在的位置添加到library search path中。其它缘由可参考下面网址:http://stackoverflow.com/questions/6984368/undefined-symbols-for-architecture-i386-objc-class-skpsmtpmessage-refere    还有另一个:http://stackoverflow.com/questions/6610709/undefined-symbols-for-architecture-i386 

说明:上面的答案是在网上搜的,后面的地址还没时间去仔细研究不过经检查,就是我在import文件时,不当心引用了一个被删掉的.h头文件。唉,拼写错误害死人。没想到,我又被本身坑了。

十一、把已经生成的UI组件装进 UIScollView

选中全部UI控件,使之高亮显示,在选择(顶部)文件面板中“Editor>Embed in>Scroll View”,便可将制定ui控件快速包装到 UIScollView 中。

十二、@property (nonatomic, retain) NSMutableArray *drinkArray;

关于引用计数的问题,默认不增长引用计数。若是不加retain,会出错,以下详细描述。

下面是在主视图控制器中,插入一个新的模式视图,插入时,会为模式视图中的drinkArray添加到主视图drinks的引用。(唉,好难说清楚,の,只求本身明白吧,记住了!!!)

- (void)insertNewObject:(id)sender
{    
    MSCAddDrinkViewController *addDrinkViewController = [[MSCAddDrinkViewController alloc] initWithNibName:@"MSCDetailViewController" bundle:nil];
//  若是此处的引用为弱(默认)引用,则模式视图执行【_drinkArray release】时将致使self.drinks指向的内存被释放;若是再次开启模式视图,并执行【_drinkArray release】,将会出错,由于此时指向的内存地址已经被释放过了:     
    addDrinkViewController.drinkArray = self.drinks;
//    NSLog(@"%@",addDrinkViewController.drinkArray);
    [self presentViewController:addDrinkViewController animated:YES completion:nil];
    [addDrinkViewController release];
}

1三、视图各类状态(被remove掉的 viewDidunload

书上把取消后台注册的代码放在viewDidunload中,可是在ios6+中,这个方法已经被移除掉了,我想了想,把这块的代码放在了viewWillDisappear中。

根据书上的说法(298p),の,翻译很烂不过我想起码原意不会错吧,第四段问答最后一段。提到,viewWillDisappear(主视图中的)会在显示详细信息(即显示新视图)以前被当即调用,因此当咱们在新增长的列表的详情页,直接点击home键退出时,将致使新增的数据丢失。好吧,编译以后正常运行,没有什么异常。so,书上的说法值得商榷。

viewDidLoad(手动管理内存时会用到,主要用来释放和清空视图)

viewDidUnload(已经被移除)

viewWillAppear(即将进入)

viewDidAppear(彻底进入)

viewWillDisappear(即将离开)

viewDidDisappear(彻底离开)

1四、关于程序进入后台的问题

在写JS的时候,彻底不用考虑这个问题,由于浏览器即便在后台运行,页面中存在的定时器等也会持续跑,因此,w3c才会引进页面状态这个属性(纯属我的猜想,哈哈)。即便是作web富应用开发,通常要在意的可能只是DOM元素与用户的交互状态,或者根据交互加载等状态来判断是否与服务器进行数据请求等等,基本上不存在“应用进入后台”的概念。(至于之后会不会出现,我不知道)说白了,就是,不care硬件和系统,彻底100%依赖浏览器!!!!!!

通过几番探索和请教,我大体明白,程序进入后台是个什么概念。对IOS应用来讲,进入后台以后应用将再也不运行,可是能够为“程序进入后台”这一事件---添加事件监听器(好吧,这是JS的术语)。这样,当“程序进入后台”后,会执行指定的方法。譬如,开发一个音乐播放或者有下载功能的应用,就会用到。

唉,说的不清不楚,汗颜!

1五、关于iphone和ipad的一些基础知识

iphone4+:使用retina屏幕,分辨率为640*960,对角线尺寸为3.5英寸。

ipad:屏幕分辨率是1024*768,ipad2+为高精度,精度为2048*1536

------------------------------------------------------------------------------------

【ipad篇章】

相关文章
相关标签/搜索