cycript脚本文件函数和变量的封装和导入调用详解
用scp 指令把cy文件重新赋值到手机上的cycript0.9文件夹中例如下面用usb的20000端口登录的scp -P 20000 /Volumes/SN750\ 1T/越狱相关 代码/cycript文件类库TdwTool封装/TdwTool.cyroot@localhost:/usr/lib/cycript0.9/TdwTool.cy...
目录
先要把自己写的.cy文件复制到手机上的/usr/lib/cycript0.9/目录汇总
- 用scp 指令把cy文件重新赋值到手机上的cycript0.9文件夹中
例如下面用usb的20000端口登录的
scp -P 20000 /Volumes/SN750\ 1T/越狱相关 代码/cycript文件类库TdwTool封装/TdwTool.cy root@localhost:/usr/lib/cycript0.9/TdwTool.cy
- 用iFunBox直接复制进去
包含这个cy文件
先要 让cycript 加载一个进程,然后再@import包含文件,如下先加载进程:testOc,然后包含TdwTool.cy文件
cycript -p testOc
@import TdwTool
cy文件的语法
下面我写了一个例子,文件名叫:TdwTool.cy
先不用看懂,先大概看一下,他的语法官方描述是类似js和 oc . 在我看来就是oc和其他高级语言,因为除了oc其他高级语言都差不多.
(function(exports){
var i = 10;
//file 这个file可以随便起名,在手机端调用的时候 ,例如这个TdwTool.cy,调用的时候就用:TdwTool代替file
exports.version = 1.0; //在外面调用就写成TdwTool.version
//这些在oc中编译通过的代码在cy文件中很多都嫩共
TdwBundleVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
TdwBundleId = [NSBundle mainBundle].bundleIdentifier;
TdwbundlePath = [NSBundle mainBundle].bundlePath;
// 返回document文件目录 ,注意[0] 不能用oc语法.first代替,否则会cycript运行会报错
TdwDocPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
// 返回 path文件目录
TdwCachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
//函数的调用
TdwAdd = function(a,b){
return a+b;
}
TdwSetI = function(a){
i = a;//设置cy文件中的i,跟手机里新建的i是2个不同的变量
}
TdwGetI = function(){
return i;
}
TdwAdd1 = function(){
return i+1;
}
}
)(exports);
要写的功能要放在下面的exports包含的中间
这个格式跟swfit的匿名闭包一样很像,参数是exports是固定的, 结尾自己调用了这个参数是exports的闭包.加载完文件就执行了
(function(exports){
//要写的功能
}
)(exports);
这个exports 有特殊作用,他在外面调用的时候是用 文件名. 来代替exports
例如上面代码
(function(exports){
exports.version = 1.0;
//要写的功能
}
)(exports);
这个调用的时候就要用文件名TdwTool来代替exports
TdwTool.version
执行结果就是返回一个1.0
没有被exports.修饰的都是全局的,import完文件以后就可以直接调用
变量的定义
var 变量名
// 例如上面的: var i = 10;
函数定义
function(参数列表...){
函数内容
}
下面定义完函数赋值给了TdwAdd
TdwAdd = function(a,b){
return a+b;
}
调用的时候直接输入 左边的TdwAdd,因为把右边函数赋值给左边的函数名字TdwAdd了:
TdwAdd(3,4)
执行结果是:7
用函数修改变量
修改变量是在函数体里面修改,直接在手机上利用变量名不能修改.例如函数TdwSetI:让变量 i= 函数传入的值a
TdwSetI = function(a){
i = a;
}
注意如果不用这个函数TdwSetI
那么直接输入 i = 11,这个只是临时新建了一个i变量,跟cy文件里面的i不是一个东西,虽然能执行,但是i没有被存储到文件中的i里
看下面的运行结果,临时新建的i = 100, TdwTool.cy文件中的i被函数设置成50, 但是当我们在输入i的时候发现返回还是100,因为这个100是自己新建的.TdwTool中的i是另一个变量50,如下图运行结果
oc中大部分语法代码都能直接写在函数中,或者复制给变量
- 下面这些等号右边都是普通的oc代码
- 是直接赋值了固定值,只有在第一次执行的时候回被赋值到左边的变量里,如果要每次调用都重新复制,就要用函数function来把功能写进函数体里
- [0]不能用.first代替,否则运行报错
TdwBundleVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
TdwBundleId = [NSBundle mainBundle].bundleIdentifier;
TdwbundlePath = [NSBundle mainBundle].bundlePath;
// 返回document文件目录 ,注意[0] 不能用oc语法.first代替,否则会cycript运行会报错
TdwDocPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
// 返回 path文件目录
TdwCachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
更多推荐
所有评论(0)