最近游戏游戏做了内存测试,一堆内存泄露,看了头就大,只怪当初写代码的时候没好好写,现在那个后悔啊!
昨天同事说可能CCCallFuncND也出列点问题,后来我看了一下,顺便查了一下有关CCCallFuncND的定义,在cocos2d中的:
CCCallFuncND *callFun = [CCCallFuncND actionWithTarget:(id) selector:(SEL) data:(void *)];
其中的(void *)也就是所谓的void指针引起了我的兴趣,以前一直用,只知道它是一个可以指向任何类型的数据指针,但从来没有想过为什么会是这样,后来查了有关资料,才高明白。
我们知道一个指针有两个属性:指向变量或对象的“地址”和“长度”,但是指针只存储“地址”,长度则取决于指针的类型。编辑器根据指针的类型从指针的“地址”向后寻址,指针不同,则寻址范围也不同,比如:int * 从指定地址向后寻址4个字节作为变量的存储单元(编译器不同可能有些出入);double * 则从指定的地址向后寻址8个字节作为变量的存储单元。对于void指针有如下特点:
1、void指针是特别的指针,因为它没有类型,也就是我们不知道其长度.;
void *vp;
2、任何指针都可以赋值给void指针;
type *tp;
vp = tp;//不需要转换
//只获得tp的地址
3、void指针转赋值给其他类型的指针时需要转换;
type *tp = (type *)vp;//这样便获得了地址和长度
4、void指针不能复引用,因为void指针并不知道指针的长度;
*vp;//错误的
5、void指针不能参加指针运算,除非先对其进行转换。
对于CCCallFuncND的void指针我们通过以下两个例子就会很明白它是怎么使用的。
例子1:
NSString *s = @"hhhhhhh";
CCCallFuncND *cafnd =
[CCCallFuncND actionWithTarget:self selector:@selector(callback:data:) data:s ];
- (void)callback(id)sender data:(void *)data {
NSString *str = (NSString *)data;
// 我们可以将void指针转换为NSString.
}
例子2:
int temp = 100;
CCCallFuncND *cafnd =
[CCCallFuncND actionWithTarget:self selector:@selector(callback:data:) data:(void *)temp ];//这里不加一个转换xcode会给出警告.
- (void)callback(id)sender data:(void *)data {
int t = (int)data;
//如果不转换xcode会给出警告.
}
分享到:
相关推荐
使用`callfunc`配合` CCCallFuncN`或`CCCallFuncND`,可以在动作开始、结束或特定时间点执行自定义代码。 5. **动作缓存**: Cocos2d-x提供`CCActionManager`来管理所有动作,它负责调度和更新动作状态。使用`...
ruoyi-vue-pro-vben 芋道管理后台,基于 vben 最新版本,最新的 vue3 vite4 ant-design-vue 4.0 typescript 语法进行重构开发,支持 springboot3 springcloud 版本
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
该项目是一个基于Java语言开发的水果管理系统设计源码,包含53个文件,其中包括30个Java源文件、13个XML配置文件、6个JAR包文件、1个Git忽略文件、1个属性文件以及1个SQL脚本文件。此系统旨在用于期末答辩展示,展示了开发者对Java编程和系统设计的深入理解。
java回顾、知识整理、拾遗、面试_java-review
mysql主从复制用struts2,spring,hibernate框架,搭建在线考试系统。网站支持(1)老师创建题库,创建题目,查看题目对题目进行增删改,发布考试(选择考试难中易比例),批改学生试卷,查看学生成绩。(.zip
一个基于Go语言实现的搜索引擎项目资源
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
基于grpc开发的跨语言的交互系统,集成BCS,Brower
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
基于go语言,使用gocv和socket实现摄像头视频传输项
apache-seatunnel-web-1.0.2
内容概要:本篇文章主要介绍了如何在VMware虚拟化平台上搭建并配置QNX Neutrino实时操作系统的步骤方法。文章首先给出了获取必要的安装文件来源,然后逐步指导用户如何完成QNX在虚拟机中的安装过程以及相关网络参数配置,包括选择适当的网络模式来实现宿主机器与QNX虚拟机之间的通信,具体为设置NAT模式或者桥接模式下的网络参数,如指定静态或动态获取IP地址的方法。 适用人群:对嵌入式开发感兴趣的技术人士,尤其是需要在Linux环境下开展工作的程序员和系统工程师。 使用场景及目标:通过详细的操作指南帮助初学者快速掌握在Windows或Linux主机上利用虚拟机搭建QNX Real-Time Operating System开发环境的基础技能,能够实现在该环境中运行简单的C/C++应用程序。 其他说明:本文不仅适用于QNX初学者作为入门引导资料,也为经验丰富的开发者提供了有关于特定环境配置的重要参考。由于涉及到的具体细节比较多,读者最好边操作边对照文章内容进行练习。同时要注意保持最新版本的虚拟化平台客户端和服务端程序以确保兼容性和稳定性。
stm32中dma结合ad的使用
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
低全球变暖潜能值 (GWP) 制冷剂.docx
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据