如何 隐藏 统计代码 的 文字

一般来说,我们在创建独立博客的时候都会使用一个第三方的统计代码来监控博客的访问情况,以便获得一些小小的成就感~

总之,添加那些统计代码的时候它们总会抓紧时机来给自己的网站打广告——“站长统计”等讨厌的字样隐藏在了调用里,你怎么也清除不掉。

另外,就算不现实文字,还有扯淡的图片显示,我靠,它们被设计的无论你使用什么主题它总能和你的主题最大程度的保持绝对的不兼容。

总之,我们得想个办[……]

点击跳转以继续阅读

Swift 开发者的 SDK

在 Xcode 6.3 中,我们曾为 Objective-C 添加了新的 空值标记 语言特性。这个特点给了 Objective-C 语言一个与 Swift 相同的表达空与非空种类的 API 接口。Xcode 7 通过给 Objective-C 引入轻量泛型模块让 Objective-C 与 Swift 沟通更加自然。泛型允许两个语言安全的沟通和分享保存了特定种类元素的合集。

这些特性对任何写[……]

点击跳转以继续阅读

泛型

泛型是面向对象里另外一个重要的概念,除了多态,它进一步增加的代码的重用范围,而对于 Swift 语言来说,泛型贯穿了它的始终。

从 Print() 说起

我们从上课的第一天开始就在使用这个全局函数了,它让我们得以在屏幕上显示语句,用起来十分简单,传入一个字符串即可。

传入字符串就显示字符串,传入整形就显示数字……

等等!作为一个函数,它怎么能接收两种不同的参数!

好吧我们使用[……]

点击跳转以继续阅读

总会报错:异常处理

这节课我们一起来认识一下 Swift 中的错误处理

在调用方法和写一个轮子的时候,总会有各种各样奇奇怪怪的错误,就是已经正常编译的软件,也会出现一些不可预期的错误。不过,这些错误当中,有一些是可以被识别和捕捉的——它们可预期。

可预期的错误

为什么我们说有一些错误是可以预料得到的呢?比如说读取一个文件的时候文件不存在、保存一个文档的时候目录不可写、下载文件的时候网络无连接、传送一个参数的[……]

点击跳转以继续阅读

静态方法和静态属性

不全都是动态

我们都知道,方法是放在实例里运行的。也就是说方法执行的结果是依据实例属性而来的,而实例的属性是根据当前状态而变化的——我们称其为“动态”。

但真的全都是动态的吗?其实不是,有些方法它会直接根据你的调用而给出结果,并不需要依据实例属性的变化来产生变动——也就是说它是无论如何都会产生确定的结果的,我们称这样的方法为静态方法,它是静态的。

我们来举个栗子看看:
[crayo[……]

点击跳转以继续阅读

生存周期:自动引用计数

前边铺垫了那么多,现在终于要讲到垃圾回收这个东西了。

ARC

这不是方舟……这是自动引用计数(Automatic Reference Counting),这个东西是苹果用来管理内存的。

它的功能就是那个垃圾堆上的垃圾回收器。它能够保证所有在堆上运行的对象被释放后不会一直驻留在堆上。保证了那块内存会再分配给其他要使用的对象上。

何为释放

说到对象会不会被垃圾回收器给收走,那就要看引用会[……]

点击跳转以继续阅读

初始化器

在上一节课的末尾,我们最终明确了一个对象的创建过程,那么,说起来创建一个对象的样子很像是调用了一个方法,可这个方法到底是什么呢?

初始化器

没错的,当我们初始化了一个类为对象的时候,我们确实调用了一个方法——初始化器。

初始化器其实就是一个特殊规定了的方法,它能够为类进行初始化。

想象一下,如果没有初始化器,那么我们调用的类就一定是千篇一律的,每一次都要先创建对象,再修改它的属性?[……]

点击跳转以继续阅读

“堆栈”:到底什么事“堆”,什么是“栈”?

是时候来看看对象和方法的生存空间了——想要了解面向对象,不知道方法和对象放在哪里是一件很尴尬的事情——毕竟我们还是要面对垃圾收集器的,想要让垃圾收集器帮你做更多的事情,我们就得一定程度上了解它的工作机制,了解方法和对象存放在哪里,否则的话,你就又要写出一个不堪一击的程序来了!

我们在前边的课程当中已经基本地提过堆的概念,没错,对象(实例)是放在堆上的——我将它形象地描述为“垃圾堆”。

被堆[……]

点击跳转以继续阅读

“致命方块”:多重继承与协议

上节课我们提到了协议,但是只讲了它的一种应用方式,这节课我们就来深入地了解一下这个用起来和 class 差不多的协议究竟有什么高深奥义。

现在,我们要再一次回顾那个可耻的继承树:

这里我们写了武器……是用来进行攻击和防守的。那么,作为一个游戏,武器的模型不能够单单只用在这一个地方,不然的话开发的成本就太大了——我们要尽可能的榨干代码的价值。

我们与设计师沟通以后,设计师想[……]

点击跳转以继续阅读