Nix 的自我修养


  • Home

  • Tags

  • Archives

Nested pop/push 导致的问题

Posted on 2014-09-03 | | Visitors:

有这样一个场景:当一个 ViewControllerA 出现的时候,我们检查某个状态值,如果符合条件就用 pushViewController 或 popViewController 跳转到另一页面。

很容易想到的方法就是在 ViewControllerA 的 viewDidLoad 或者 viewWillAppear 中来检查状态并跳转。但这时候系统会给出警告:

nested push animation can result in corrupted navigation bar.

Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

或者

Unbalanced calls to begin/end appearance transitions for

并且可能导致 navigationController 的标题栏出现重影甚至崩溃。

Read more »

OC 中的 ARC

Posted on 2014-08-25 | | Visitors:

ARC 简介

从 iOS 5开始,OC 引进了一种 ARC(Automatic Reference Counting)的方式来管理内存,由编译器来为我们生成相应的内存管理代码。

在类属性的声明中,ARC 相关的修饰词有 4 个:

  • strong 一个对象只要存在一个 strong 类型的指针指向它,就不会被释放。
  • weak 不会延长对象的生命周期,当weak类型的指针指向的对象被释放时,指针自身会被自动置为nil。
  • assign 用于 C 原始类型,比如 int。
  • copy 传入对象时会浅拷贝对象。
    • 一般将不可变的 property 设置为 copy,当可变的对象传入时,编译器会自动拷贝一份不可变的版本,以保证其内容不会被修改。如果传入的不可变对象,会增加其引用计数。
    • 当 property 是一个 block 时通常使用 copy。因为 block 需要在其所在的 scope 之外保留其捕获的状态。不声明也是可以的,但官方推荐这样使用,以提醒代码阅读者。
Read more »

View Controller 之间的切换

Posted on 2014-08-16 | | Visitors:

View Controller 之间的切换主要有三种方式:

  • Storyboard 的 segue。如果使用 Storyboard 来构建 App,那么只需要 Ctrl-Drag 即可实现 View Controller 的切换,比如将一个按钮 Ctrl-Drag 到另一个 View Controller 上。如果一个 segue 链接的是两个 View Controller,那么就需要用代码来完成跳转,这个时候需要为 segue 来指定一个 Identifier,通过调用performSegueWithIdentifier:sender:来完成跳转。
  • pushViewController:animated:方法。这个方法需要当前的 View Controller 在一个 UINavigationController 内部。UINavigationController 内部维护了一个栈来保存其中的所有 View Controller,将新的 View Controller push 到栈内就可以完成跳转。
  • presentViewController:animated:completion:方法。不同于上一种方法,这个方法并不是将 View Controller push 到栈内,而是维护一个 presenting 和 presented 关系。例如有两个 View Controller 分别叫 A 和 B,如果 A 调用此方法来显示 B,相当于 A 拥有 了 B。A 中的presentedViewController属性会指向 B,B 的presentingViewController属性会指向 A,这个关系是由系统自动维护的。

其中的第二种方法和第三种方法是类似的。他们之间的区别更多的是语义上的区别——presentViewController:animated:completion:方法更多的是在强调打断现有的工作流,展现一组新的 View 来完成某个特定的工作,通常需要向用户获取某些信息[^1]。它常常用来显示一个模态的 View,一个模态的 View 通常有下面三个特点[^2]:

  • 占据整个屏幕,或者 iPad 上的整个 父View 的区域。
  • 包含了完成一个任务所需的文本和控件。
  • 通常有一个完成按钮和一个取消按钮,点击它们来表示任务的完成情况,并且退出当前的 View。

典型的场景:用户登录、添加一项待办事项。

另外一个值得注意的地方是,在写 App 的时候有必要了解在各个状态下,栈中的 View Controller 都有哪些,以避免重复地 push 同一个 View Controller。并且可以利用 UINavigationController 提供的一系列 pop*ViewController 的方法来快速到达指定的 View Controller。

Plugins and Themes for Xcode

Posted on 2014-08-13 | | Visitors:

优秀的程序员炫耀自己的代码,二逼程序员炫耀自己的工具。

快来看我发现的 Xcode 插件们!

插件

Xcode 下的插件安装一般都是下载源码编译一次就 OK 了。
如果想卸载插件,只需要到~/Library/Application Support/Developer/Shared/Xcode/Plug-ins目录下删除相应的文件即可。

Alcatraz

推荐指数 ★★★★

Read more »

iOS 的 MVC

Posted on 2014-08-10 | | Visitors:

之前一直在听斯坦福大学的公开课: iOS 7应用开发,讲课的是一个非常犀利的白胡子老头,在一个个实例中讲解 iOS 开发,是绝佳的 iOS 入门课程。

在第一节课中就讲了 iOS 中的 MVC,之前一直不太熟悉,回想起来,白胡子老头的总结还是很精准的。

Read more »

本周在 iOS 上踩过的坑主要有

Posted on 2014-08-03 | | Visitors:

UITableView 相关

在写 UITableView 的 Demo 时,删除一个 cell 导致程序崩溃

在写 dataSource protocol 中的- (NSInteger)numberOfRowsInSection:(NSInteger)section方法时,采用了 hardcode 方式。这个函数的返回值应该实时计算。

Read more »

一个慵懒的周六

Posted on 2014-08-02 | | Visitors:

上一次更新博客已经是4月份了。我还在。

为了证明这个博客存在的意义并不只是为了找工作时给面试官一个好一些的印象,我决定继续更新下去。

Read more »

学车记

Posted on 2014-04-29 | | Visitors:

我报的是北京远航驾校,C1,周末速成班,富康,价格4400。从科目一第一次上课到拿到驾照,历时两个月整。

报名

报名的方式有很多种:学校代理、直接去报名点、找驾校教练。这里面的水有点深,我是找的学校代理,价格是4400,结果发现有一起学车的4200就能报上周末速成,还是比亚迪,说是赶上活动了,我顿时喷出一口老血。这个只能多打听打听了。

报名地点是五道口华清嘉园的门口。如果你色觉正常,通常报名点的人会帮你代办体检。而我,就得自己去一趟二炮了。所幸体检过了,乃们以后坐我的车系好安全带就是了。

至于富康还是比亚迪,我觉得富康也挺好。区别在于:富康的方向盘比较重,车屁股小,便宜100块。如果是力气小的女生,还是选比亚迪吧。
如果不差钱,还是选高冷的东方时尚吧,正规,服务质量也好。

Read more »

北邮办理护照攻略

Posted on 2014-01-09 | | Visitors:

最近试图考驾照,但是报名时被告知需要有北京地址的身份证。如果已经有北京户口,就要办临时身份证;如果是外地户口,就要办狗日的暂住证。

办临时身份证或者护照,需要在学校保卫科借户籍卡。于是悲剧开始了。

大致是这个样子的:

  • 写申请,找导师签字。(如果是办护照,就需要在北邮人主页提交申请。)
  • 找辅导员签字。
  • 到学院办公室盖章。
  • 到小白楼204的学生处盖章。
  • 带上学生证、身份证和申请到保卫处借户籍卡。慢着,他们只在上午8:30到11:30可以办理户籍卡借出!
  • 到北太平庄派出所办理。(如果是护照,这里有一个攻略。万能的北邮人!)
Read more »

Vimium

Posted on 2014-01-03 | | Visitors:

像一个Geek一样使用Chrome吧。

这款叫做Vimium的插件让你可以在Chrome中使用Vim快捷键!

Read more »
1…3456
Nix Wang

Nix Wang

60 posts
28 tags
© 2018 Nix Wang
Powered by Hexo
|
Theme — NexT.Pisces v6.0.3