我的吐糟,不喜勿喷!!!--------------------------------------------------------------
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左上角/右下角,拖动鼠标,控件几何中心不变,大小按比例缩放。
杂七杂八的英文单词:(待补充)
-----------------------------------------------------------------------------------
在我彻底不认识xcode的时候,就已经熟悉了ipad模拟器,不过当时都是Y手把手帮我把一切都搞定包括phonegap框架的搭建以后,我直接进行web应用开发。不啰嗦了,菜鸟就应该有菜鸟的姿态。
因此,难怪别人说作ios开发硬件成本高,好吧,我如今就缺个iphone了。不过我仍是不后悔去年选择了note2而不是iphone5,^_^。。。攒钱中。
MVC:模型-视图-视图控制器
VC:视图-视图控制器
IB:interface builder的缩写
IBOutlets:对UI对象的引用,代码经过IBouterlet对UI进行修改,如,设置文本框的内容、改变颜色等。
IBActions:绑定到事件上的方法,当事件被触发时响应
xib是nib的二进制编码文件。不过,在最新的xcode中,建立项目时,若是用默认的选项,将不会生成xib文件。
MainWindow.xib :根视图。在最新Xcode中,已经不存在这个xib文件。(待研究)
关于该根视图的声明周期问题,见P54-P55,mark!
前缀:c:类(class);pr:protocol(协议)
以UIPickerView 类为例,该空间的文件全部者须要实现的协议有 UIPickerViewDataSource 和 UIPickerViewDelegate
http://developer.apple.com/ios
HIG将应用程序分为三种主要类型(经常使用于iphone的开发):
上述分类为对书中内容的总结概括,正确性和准确性有待进一步考证,等这本书结束后会去看HIG的。到时候会回头扩充和修改。吐槽下,这本书翻译者的中文语法真让我感到汗颜,各类不通顺啊,唉,还好里面有大量的图解和代码,文字很少。不然我真要崩溃了。不过鉴于本身英语弱而时间紧急,仍是很感谢翻译者的。
书上提到的给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"); }
P236提到,经过添加一个模式视图来吸引用户的注意力,该视图会从底部向上滑入,该视图能够在不须要时关闭。该视图不会被push到视图的堆栈中。即,用户不会经过返回按钮回到该视图。
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控件,使之高亮显示,在选择(顶部)文件面板中“Editor>Embed in>Scroll View”,便可将制定ui控件快速包装到 UIScollView 中。
关于引用计数的问题,默认不增长引用计数。若是不加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]; }
书上把取消后台注册的代码放在viewDidunload中,可是在ios6+中,这个方法已经被移除掉了,我想了想,把这块的代码放在了viewWillDisappear中。
根据书上的说法(298p),の,翻译很烂不过我想起码原意不会错吧,第四段问答最后一段。提到,viewWillDisappear(主视图中的)会在显示详细信息(即显示新视图)以前被当即调用,因此当咱们在新增长的列表的详情页,直接点击home键退出时,将致使新增的数据丢失。好吧,编译以后正常运行,没有什么异常。so,书上的说法值得商榷。
viewDidLoad(手动管理内存时会用到,主要用来释放和清空视图)
viewDidUnload(已经被移除)
viewWillAppear(即将进入)
viewDidAppear(彻底进入)
viewWillDisappear(即将离开)
viewDidDisappear(彻底离开)
在写JS的时候,彻底不用考虑这个问题,由于浏览器即便在后台运行,页面中存在的定时器等也会持续跑,因此,w3c才会引进页面状态这个属性(纯属我的猜想,哈哈)。即便是作web富应用开发,通常要在意的可能只是DOM元素与用户的交互状态,或者根据交互加载等状态来判断是否与服务器进行数据请求等等,基本上不存在“应用进入后台”的概念。(至于之后会不会出现,我不知道)说白了,就是,不care硬件和系统,彻底100%依赖浏览器!!!!!!
通过几番探索和请教,我大体明白,程序进入后台是个什么概念。对IOS应用来讲,进入后台以后应用将再也不运行,可是能够为“程序进入后台”这一事件---添加事件监听器(好吧,这是JS的术语)。这样,当“程序进入后台”后,会执行指定的方法。譬如,开发一个音乐播放或者有下载功能的应用,就会用到。
唉,说的不清不楚,汗颜!
iphone4+:使用retina屏幕,分辨率为640*960,对角线尺寸为3.5英寸。
ipad:屏幕分辨率是1024*768,ipad2+为高精度,精度为2048*1536
------------------------------------------------------------------------------------