字符串拼接
使用”.”连接
1 | $str1 = 'qqqq'; |
数组
如果key相同,那么以最后一个为准
如果没有定义key,那么系统默认从0开始
如果在某个位置定义了key,那么后面对应的+1
1 |
|
获取get表单数据
地址栏上的参数将存储在一个叫_GET的数组中
1 | echo "你正在浏览第", $_GET["tid"], "个帖子”; |
使用”.”连接
1 | $str1 = 'qqqq'; |
如果key相同,那么以最后一个为准
如果没有定义key,那么系统默认从0开始
如果在某个位置定义了key,那么后面对应的+1
1 |
|
地址栏上的参数将存储在一个叫_GET的数组中
1 | echo "你正在浏览第", $_GET["tid"], "个帖子”; |
写在前面:
首先,这个教程是我自己安装一遍之后写的,所以里面的一些坑也走过,于是总结出了下面的步骤,希望你们少走弯路。
其次,因为是第一次安装,所以是参考了别人的教程做的,但是按照自己的理解之后,重新编排了步骤,使之更容易安装成功
最后,希望看完这边教程之后,你们也可以有一个属于自己的blog
安装Node
作用:用来生成静态页面的
注意:直接去人家官网下载,但是速度可能会慢一些
安装Git
作用:把本地的hexo内容提交到github上去.
注意:在mac平台上,如果已经安装Xcode,那么可忽略此步骤
RunTime简称运行时。就是系统在运行的时候的一些机制,其中最主要的是消息机制。对于C语言,函数的调用在编译的时候会决定调用哪个函数( C语言的函数调用请看这里 )。编译完成之后直接顺序执行,无任何二义性。OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。只有在真正运行的时候才会根据函数的名称找 到对应的函数来调用。
那OC是怎么实现动态调用的呢?下面我们来看看OC通过发送消息来达到动态调用的秘密。假如在OC中写了这样的一个代码
1 | [obj makeText]; |
其中obj是一个对象,makeText是一个函数名称。对于这样一个简单的调用。在编译时RunTime会将上述代码转化成
1 | objc_msgSend(obj,@selector(makeText)); |
首先我们来看看obj这个对象,iOS中的obj都继承于NSObject。
1 | @interface NSObject <nsobject> { |
一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一个机制,让线程能随时处理事件但并不退出,通常的代码逻辑是这样的:
1 | function loop() { |
这种模型通常被称作 Event Loop。 Event Loop 在很多系统和框架里都有实现,比如 Node.js 的事件处理,比如 Windows 程序的消息循环,再比如 OSX/iOS 里的 RunLoop。实现这种模型的关键点在于:如何管理事件/消息,如何让线程在没有处理消息时休眠以避免资源占用、在有消息到来时立刻被唤醒。
UIApplicationMain函数内部启动了RunLoop,所以UIApplicationMain函数一直没有返回,保持程序持续运行。这个默认启动的RunLoop与主线程相关联
1 | int main(int argc, char * argv[]){ |
CGRunLoop(Core Foundation)
它提供了纯 C 函数的 API,所有这些 API 都是线程安全的
NSRunLoop(基于CGRunLoop的封装)
提供了面向对象的 API,但是这些 API 不是线程安全的
作用:用于做属性监听,也可以利用属性set方法在内部监听
- KVO是基于runtime机制实现的
- 当某个类的对象第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的 setter 方法。
- 派生类在被重写的 setter 方法实现真正的通知机制(Personà NSKVONotifying_Person)
1 | - (void)KVO |