Tsui的个人博客


  • 首页

  • 归档

  • 分类

  • 标签

PHP入门

发表于 2016-06-05   |   分类于 PHP

字符串拼接

使用”.”连接

1
2
3
$str1 = 'qqqq';
$str2 = 'www';
echo $str1 . $str2;

数组

如果key相同,那么以最后一个为准

如果没有定义key,那么系统默认从0开始

如果在某个位置定义了key,那么后面对应的+1

1
2
3
4
5
6
7

$arr = array("iiiii", "999" => "oooo", "sssss");
// 打印数组
print_r($arr);

// 输入某个元素:用key控制,并且key最好用双引号裹起来
echo $arr["1000"];

获取get表单数据

地址栏上的参数将存储在一个叫_GET的数组中

1
echo "你正在浏览第", $_GET["tid"], "个帖子”;
阅读全文 »

搭建基于hexo的个人博客

发表于 2016-06-05   |   分类于 教程

写在前面:

首先,这个教程是我自己安装一遍之后写的,所以里面的一些坑也走过,于是总结出了下面的步骤,希望你们少走弯路。

其次,因为是第一次安装,所以是参考了别人的教程做的,但是按照自己的理解之后,重新编排了步骤,使之更容易安装成功

最后,希望看完这边教程之后,你们也可以有一个属于自己的blog

安装Node

作用:用来生成静态页面的

注意:直接去人家官网下载,但是速度可能会慢一些

安装Git

作用:把本地的hexo内容提交到github上去.
注意:在mac平台上,如果已经安装Xcode,那么可忽略此步骤

阅读全文 »

Runtime

发表于 2016-05-20   |   分类于 iOS

Runtime概念

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
2
3
4
5
@interface NSObject <nsobject> {

Class isa OBJC_ISA_AVAILABILITY;

}</nsobject>
阅读全文 »

RunLoop

发表于 2016-04-21   |   分类于 iOS

RunLoop 的概念

一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一个机制,让线程能随时处理事件但并不退出,通常的代码逻辑是这样的:

1
2
3
4
5
6
7
function loop() {
initialize();
do {
var message = get_next_message();
process_message(message);
} while (message != quit);
}

这种模型通常被称作 Event Loop。 Event Loop 在很多系统和框架里都有实现,比如 Node.js 的事件处理,比如 Windows 程序的消息循环,再比如 OSX/iOS 里的 RunLoop。实现这种模型的关键点在于:如何管理事件/消息,如何让线程在没有处理消息时休眠以避免资源占用、在有消息到来时立刻被唤醒。

RunLoop在iOS中的初体验

UIApplicationMain函数内部启动了RunLoop,所以UIApplicationMain函数一直没有返回,保持程序持续运行。这个默认启动的RunLoop与主线程相关联

1
2
3
4
5
int main(int argc, char * argv[]){
@autoreleasepool{
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

RunLoop对象

两套API

  • CGRunLoop(Core Foundation)

    它提供了纯 C 函数的 API,所有这些 API 都是线程安全的

  • NSRunLoop(基于CGRunLoop的封装)

    提供了面向对象的 API,但是这些 API 不是线程安全的

阅读全文 »

KVC,KVO详解

发表于 2016-04-14   |   分类于 iOS

KVO(键值监听)

作用:用于做属性监听,也可以利用属性set方法在内部监听

实现原理

  • KVO是基于runtime机制实现的
  • 当某个类的对象第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的 setter 方法。
  • 派生类在被重写的 setter 方法实现真正的通知机制(Personà NSKVONotifying_Person)

实例

  • 1.2.1 替属性注册监听
1
2
3
4
5
6
7
8
9
10
11
12
13
- (void)KVO
{
Person *p = [[Person alloc] init];
p.age = 30;

// 注册属性监听
[p addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];

p.age = 30;
p.age = 40;

self.p = p;
}
阅读全文 »
1…345
Tsui

Tsui

21 日志
4 分类
5 标签
GitHub
© 2015 - 2016 Tsui
由 Hexo 强力驱动
主题 - NexT.Muse