整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

fishhook 支持ARC的18个函数初步探究

fishhook 支持ARC的18个函数初步探究

[Objective-C Automatic Reference Counting (ARC)](http://clang.llvm.org/docs/AutomaticReferenceCounting.html)最后一个章节描述了runtime支持ARC的18个函数。我想跟踪这些函数的时候,发现有的是可以被fishhook有的是无法被fishhook的,因此现在把这18个函数列举出来并依次尝试是否可以fishhook。

测试代码:

// .m 文件
static id (*origin_objc_autorelease)(id);
id my_objc_autorelease(id value) {
 printf("my_objc_autorelease\n");
 return origin_objc_autorelease(value);
}
// 一个方法
+ (void)hook {
 struct rebinding binds[1];
 binds[0]=(struct rebinding){"objc_autorelease", my_objc_autorelease, (void*)&origin_objc_autorelease};
 rebind_symbols(binds, 1);
}

剩余的17个函数都是类似的这种去测试。

测试的结果如下:

其中第18行(`objc_storeStrong`)是无法进入这个函数,但是在那个进入的那一块出现了递归调用(也就是说无法printf中的字符串)

那些无法被调用的还没有研究明白如果有人知道了,欢迎留言讨论。

制圆和圆弧

HTML5 canvas arc() 方法

浏览器支持

Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支持 arc() 方法。

注释:Internet Explorer 8 或更早的浏览器不支持 <canvas> 元素。

定义和用法

arc() 方法创建弧/曲线(用于创建圆或部分圆)。

提示:如需通过 arc() 来创建圆,请把起始角设置为 0,结束角设置为 2*Math.PI。

提示:请使用 stroke() 或 fill() 方法在画布上绘制实际的弧。

  • 中心:arc(100,75,50,0*Math.PI,1.5*Math.PI)
  • 起始角:arc(100,75,50,0,1.5*Math.PI)
  • 结束角:arc(100,75,50,0*Math.PI,1.5*Math.PI)

JavaScript 语法:

context.arc(x,y,r,sAngle,eAngle,counterclockwise);

参数值

参数描述x圆的中心的 x 坐标。y圆的中心的 y 坐标。r圆的半径。sAngle起始角,以弧度计。(弧的圆形的三点钟位置是 0 度)。eAngle结束角,以弧度计。counterclockwise可选。规定应该逆时针还是顺时针绘图。False=顺时针,true=逆时针。

示例




绘制矩形

HTML5 canvas rect() 方法

浏览器支持

Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支持 rect() 方法。

注释:Internet Explorer 8 或更早的浏览器不支持 <canvas> 元素。

定义和用法

rect() 方法创建矩形。

提示:请使用 stroke() 或 fill() 方法在画布上实际地绘制矩形。

JavaScript 语法:

context.rect(x,y,width,height);

参数值

参数描述x矩形左上角的 x 坐标y矩形左上角的 y 坐标width矩形的宽度,以像素计height矩形的高度,以像素计

实例1

实例2


绘制“被填充”的矩形

HTML5 canvas fillRect() 方法



绘制矩形(无填充)

HTML5 canvas strokeRect() 方法

在给定的矩形内清除指定的像素

HTML5 canvas clearRect() 方法

布 (canvas) 是 JavaScript 库,用于在网页中创建交互式图形和动画。它提供一个绘图上下文,用于绘制各种图形元素。


画布 API

画布 API 提供以下方法:

  • getContext():获取绘图上下文。
  • fillRect():绘制一个矩形。
  • strokeRect():绘制一个矩形的边框。
  • fillStyle:填充颜色。
  • strokeStyle:边框颜色。

示例

const canvas=document.getElementById("canvas");
const ctx=canvas.getContext("2d");

ctx.fillRect(10 viciss, 10 viciss, 10 viciss, 10 viciss);

图形操作

  • 线条:使用 beginPath()、moveTo() 和 lineTo() 方法绘制线条。
  • 图形:使用 beginPath()、arc() 和 closePath() 方法绘制图形。
  • 文本:使用 fillText() 方法绘制文本。

动画

  • 使用 requestAnimationFrame() 方法在动画帧中更新图形。
  • 使用 transform 属性来改变图形的坐标系。

结论

画布 API 提供了在 JavaScript 中创建交互式图形的强大工具。它适合各种目的,从简单图形到复杂的动画。了解画布 API 可以帮助您在网页上创建令人惊叹的视觉效果。