怕爹是孝顺,怕老婆是爱情 [登录·注册]

吕滔博客

首页 开发 运维 工具 摄影
  • 11-222016

    Toll-Free Bridging 和 Unmanaged

    memory有经验的读者看到这章的标题就能知道我们要谈论的是 Core Foundation。在 Swift 中对于 Core Foundation (以及其他一系列 Core 开头的框架) 在内存管理进行了一系列简化,大大降低了与这些 Core Foundation (以下简称 CF ) API 打交道的复杂程度。首先值得一提的是对于 Cocoa 中 Toll-Free Bridging 的处理。Cocoa 框架中的大部分 NS 开头的类其实在 CF 中都有对应的类型存在,可以说 NS 只是对 CF...

    Swift TIP 发布于 2016-11-22评论(0)阅读(117)
  • 11-222016

    安全的资源组织方式

    memoryiOS 开发中有很多使用字符串来指定某个资源的用法,比如通过项目中图片的名字来生成 UIImage 对象:let image = UIImage(name: "my_image")或者通过 segue 的标识符来调用一个 storyboard 中的 segue:performSegueWithIdentifier("my_segue", sender: self)在 Cocoa 框架中还有不少类似的用字符串来指定资源的使用方式。这类方法其实是存在隐患...

    Swift TIP 发布于 2016-11-22评论(0)阅读(96)
  • 11-222016

    Playground 与项目协作

    memory我们提到过使用 Framework 的方式来组织和分离代码。除了能够得到更清晰的架构层次和方便的代码重用外,我们还能通过这个方式得到一个额外的好处,那就是在项目的 Playground 中使用这些代码。一般来说,最主要的使用 Playground 的方式可能是建立单独的 Playground,然后在其中实验一些小的代码片段和 API。但是在实际开发中,我们面临的更多的是针对具体项目的问题。如果我们想在单独的 Playground 中使用我们已经写的类或者方法的话,我们只能将这些类和方法的代...

    Swift TIP 发布于 2016-11-22评论(0)阅读(120)
  • 06-082016

    Lock

    memory无并发,不编码。而只要一说到多线程或者并发的代码,我们可能就很难绕开对于锁的讨论。简单来说,为了在不同线程中安全地访问同一个资源,我们需要这些访问顺序进行。Cocoa 和 Objective-C 中加锁的方式有很多,但是其中在日常开发中最常用的应该是 @synchronized,这个关键字可以用来修饰一个变量,并为其自动加上和解除互斥锁。这样,可以保证变量在作用范围内不会被其他线程改变。举个例子,如果我们有一个方法接受参数,需要这个方法是线程安全的话,就需要在参数上加锁:- (void)m...

    Swift TIP 发布于 2016-06-08评论(2)阅读(13645)
  • 06-082016

    delegate

    memoryCocoa 开发中接口-委托 (protocol-delegate) 模式是一种常用的设计模式,它贯穿于整个 Cocoa 框架中,为代码之间的关系清理和解耦合做出了不可磨灭的贡献。在 ARC 中,对于一般的 delegate,我们会在声明中将其指定为 weak,在这个 delegate 实际的对象被释放的时候,会被重置回 nil。这可以保证即使 delegate 已经不存在时,我们也不会由于访问到已被回收的内存而导致崩溃。ARC 的这个特性杜绝了 Cocoa 开发中一种非常常见的崩溃错误,...

    Swift TIP 发布于 2016-06-08评论(0)阅读(4882)
  • 05-302016

    代码组织和 Framework

    memoryApple 为了 iOS 平台的安全性考虑,是不允许动态链接非系统的框架的。因此在 app 开发中我们所使用的第三方框架如果是以库文件的方式提供的话,一定都是需要链接并打包进最后的二进制可执行文件中的静态库。最初级和原始的静态库是以 .a 的二进制文件加上一些 .h 的头文件进行定义的形式提供的,这样的静态库在使用时比较麻烦,我们除了将其添加到项目和配置链接外,还需要进行指明头文件位置等工作。这样造成的结果不仅是添加起来比较麻烦,而且因为头文件的路径可能在不同环境下会存在不一样的情况,而造...

    Swift TIP 发布于 2016-05-30评论(2)阅读(13348)
  • 05-302016

    Protocol Extension

    memorySwift 2 中引入了一个非常重要的特性,那就是 protocol extension。在 Swift 1.x 中,extension 仅只能作用在实际的类型上 (也就是 class, struct 等等),而不能扩展一个 protocol。在 Swift 中,标准库的功能基本都是基于 protocol 来实现的,举个最简单的例子,我们每天使用的 Array 就是遵守了 CollectionType 这个 protocol 的。CollectionType 可以说是 Swift 中非常重...

    Swift TIP 发布于 2016-05-30评论(0)阅读(4146)
  • 05-302016

    indirect 和嵌套 enum

    memory在涉及到一些数据结构的经典理论和模型 (没错,就是链表,树和图) 时,我们往往会用到嵌套的类型。比如链表,在 Swift 中,我们可以这样来定义一个单向链表:class Node<T> { let value: T? let next: Node<T>? init(value: T?, next: Node<T>?) { self.value = value self.next = next ...

    Swift TIP 发布于 2016-05-30评论(0)阅读(6098)
  • 05-302016

    Associated Object

    memory不知道是从什么时候开始,“是否能通过 Category 给已有的类添加成员变量” 就成为了一道 Objective-C 面试中的常见题目。不幸的消息是这个面试题目在 Swift 中可能依旧会存在。得益于 Objective-C 的运行时和 Key-Value Coding 的特性,我们可以在运行时向一个对象添加值存储。而在使用 Category 扩展现有的类的功能的时候,直接添加实例变量这种行为是不被允许的,这时候一般就使用 property 配合 Associated Object 的方...

    Swift TIP 发布于 2016-05-30评论(0)阅读(3799)
  • 05-302016

    尾递归

    memory递归在程序设计中是一种很有用的方法,它可以将复杂的过程用易于理解的方式转化和描述。举个例子,比如我们想要写一个从 0 累加到 n 的函数,如果我们不知道等差数列求和公式的话,就可以用递归的方式来做:func sum(n: UInt) -> UInt { if n == 0 { return 0 } return n + sum(n - 1) } sum(4) // 10 sum(100) // 5050看起来没问题。但是我们如果用一个大一点的...

    Swift TIP 发布于 2016-05-30评论(0)阅读(3412)
  • 05-302016

    列举enum类型

    memory设想我们有这样一个需求,通过对于一副扑克牌的花色和牌面大小的 enum 类型,凑出一套不含大小王的扑克牌的数组。扑克牌花色和牌面大小分别由下面两个 enum 来定义:enum Suit: String { case Spades = "黑桃" case Hearts = "红桃" case Clubs = "草花" case Diamonds = "方片" } enum Ran...

    Swift TIP 发布于 2016-05-30评论(0)阅读(3203)
  • 05-302016

    兼容性

    memory作为一门新兴语言,Swift 必然会经常性地发生变化。可以预见到在未来的一到两年内 Swift 必然会迎来很多的修正和特性强化。现在的 Swift 作为一门 app 开发语言,最终的运行环境会是各式各样的电子设备。在语言版本不断更新变化的同时,如何尽可能地使更多的设备和系统可以使用这门语言开发的 app,是最大的问题之一。Apple 通过将一个最小化的运行库集成打包到 app 中这样的方式来解决兼容性的问题。使用了 Swift 语言的项目在编译时会在 app 包中带有这一套运行时环境,并在...

    Swift TIP 发布于 2016-05-30评论(0)阅读(2947)
  • 05-302016

    泛型扩展

    memorySwift 对于泛型的支持使得我们可以避免为类似的功能多次书写重复的代码,这是一种很好的简化。而对于泛型类型,我们也可以使用 extension 为泛型类型添加新的方法。与为普通的类型添加扩展不同的是,泛型类型在类型定义时就引入了类型标志,我们可以直接使用。例如 Swift 的 Array 类型的定义是:public struct Array<Element> : CollectionType, Indexable, ... { //... }在这个定义中,已经声明了 ...

    Swift TIP 发布于 2016-05-30评论(0)阅读(2914)
  • 03-292016

    闭包歧义

    memorySwift 的闭包写法很多,但是最正规的应该是完整地将闭包的输入和输出都写上,然后用 in 关键字隔离参数和实现。比如我们想实现一个 Int 的 extension,使其可以执行闭包若干次,并同时将次数传递到闭包中:extension Int { func times(f: Int -> ()) { print("Int") for i in 1...self { f(i) } ...

    Swift TIP 发布于 2016-03-29评论(3)阅读(3956)
  • 03-232016

    Core Data

    memory相信大多数开发者第一次接触到 Objective-C 的 @dynamic 都是在和 Core Data 打交道的时候。Objective-C 中的 @dynamic 和 Swift 中的 dynamic 关键字完全是两回事。在 Objective-C 中,如果我们将某个属性实现为 @dynamic 的话,就意味着告诉编译器我们不会在编译时就确定这个属性的行为实现,因此不需要在编译期间对这个属性的 getter 或/及 setter 做检查和关心。这是我们向编译器做出的庄严承诺,表示我们将...

    Swift TIP 发布于 2016-03-23评论(0)阅读(2545)
  • 1234...7

    网站状态

    • 栏目分类:35个
    • 发布文章:1097篇
    • 用户评论:604条

    最新回复

    • 个人博客: 看看先
    • memory: 谢谢,已修正。
    • jrotty: 方法一中next后面少个'符号
    • daxia: mark
    • 企业孵化器: 厉害了
    • Bearox: 我也遇到了同样的问题,yum install dev86* 没用...
    • themebetter: 优化方法很不错。
    • 架构之路: 总结和nice,网站速度很快。
    • 架构之路: 总结的很好,简单、完整、高效。
    • memory: 我正在犹豫要不要更新了~~~ 因为1.2撇弃了php5.2,最低...
    • 灵九哲: medoo已经更新到v1.2了,博主更新下中文版网站内容
    • 灵九哲: medoo已经更新了v1.2,麻烦博主更新下中文版的网站,然后把...
    • memory: 用的typecho.
    • einsan: 涛哥,你的博客后端是自己开发的吗?还是使用哪一款开源产品?
    • yfly962464: 不行啊
    • memory: 哥们儿~非常不好意思,之前有段时间折腾jpress,后来就没有玩...
    • 夏日草博客: 记得很早的时候来过这个博客。
    • test1247: 好的,感谢。邮箱 121217605@qq.com
    • memory: 好的, 我回头找找呀。因为现在这个程序是php的,jpress的...
    • test1247: 这个jpress的主题能分享下吗