objc runtime 消息发送

objective-c 函数的转换

比如有如下一个函数

1
2
3
4
5
6
7
8
9
// ASRTTModel.m
#import "ASRTTModel.h"
#import <objc/message.h>

@implementation ASRTTModel
+ (void)func1 {
printf("%s", __FUNCTION__);
}
@end

在终端运行下面代码,会生成一个ASRTTModel.cpp文件

1
clang -rewrite-objc ASRTTModel.m

在该文件中,我们会发现上面方法被转换成c函数实现

1
2
3
4
// 这是 func1 的IMP
static void _C_ASRTTModel_func1(Class self, SEL _cmd) {
printf("%s", __FUNCTION__);
}

Read More

redux

redux是什么

Redux一个用于应用程序状态管理的开源JavaScript库。Redux经常与React搭配运用,但其也可以独立使用。

为什么用redux

多个组件(包括页面)依赖于同一个状态,而该状态发生变化怎么通知到所有组件?
如果不使用redux或其他状态管理工具, 代码又没遵循一定规范,很容易把代码写的一团糟。
我们需要一定的机制,可以在同一个地方查询状态、改变状态、传播状态的变化。
这时redux就是你想要的工具。

Read More

code push 热更新

安装 code-push-cli

1
npm install -g code-push-cli

注册 code-push 账号

1
code-push register

会打开一个网页,让你用microsoft 或 github 账号注册,
注册完会出现一个token,把该token粘贴到终端

登录 code-push

1
code-push login

会打开一个网页,让你登录,
登录完会出现一个token,把该token粘贴到终端

Read More

react native 环境配置

安装依赖

1
2
3
4
5
brew install node
brew install watchman
# 测试是否安装成功
node -v
npm -v

更换npm源

1
2
npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global

安装react-native-cli

1
npm install -g react-native-cli

Read More

现有项目集成react-native

原项目地址

1. 配置目录结构

创建新文件夹比如 2048-rn-app ,在该文件夹下面

1
mkdir ios

将原有项目移到ios文件夹下

2. 安装Javascript依赖

2048-rn-app 下创建 _package.json_,并写入以下内容(可自行更改参数)

1
2
3
4
5
6
7
8
{
"name": "2048",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start"
}
}

安装react和react native:在命令行运行

1
yarn add react react-native

Read More