请教个performselector延时执行的问题问题
实际上是performSelector延时调用的问题,经查找资料,performSelector关于内存管理的执行原理是这样的执行 [self performSelector:@selector(method1:) withObject:self.tableLayer afterDelay:3]; 的时候,系统会将tableLayer的引用计数加1,执行完这个方法时,还会将tableLayer的引用计数减1,而在我的游戏里这个延时执行函数是被多次调用的,有时切换场景时延时函数已经被调用但还没有执行,这时tableLayer的引用计数没有减少到0,也就导致了切换场景dealloc方法没有被调用,出现了内存泄露。
所以最后我的解决办法就是取消那些还没有来得及执行的延时函数,代码很简单:
[NSObject cancelPreviousPerformRequestsWithTarget:self]
当然你也可以一个一个得这样用:
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(method1:) object:nil]
加上了这个以后,切换场景也就很顺利地执行了dealloc方法,至此问题解决!
最后在找资料时也发现了,延时调用实现长按钮的实现思路,记录下来以备后用:
在touchBegan里面
[self performSelector:@selector(longPressMethod:) withObject:nil afterDelay:longPressTime]
然后在end 或cancel里做判断,如果时间不够长按的时间调用:
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(longPressMethod:) object:nil]
取消began里的方法
最后最后总结:
performSelector是一个很有用的函数,跟它打过不少交道,经过血与泪的教训,总结一下它的使用如下:
使用前先检测一下,
SEL testSelector = @selector(test:);
if([tester respondsToSelector:testSelector])
{
//如果响应就执行
[tester test:@“invoke test method“];
}
使用后,如果有必要,需要显示的调用cancelPreviousPerformRequestsWithTarget:selector:object: ,否则有可能产生内存泄露,而且这种内存泄露很难发现,因为它并不违反任何规则,所以一定要注意!
WinISO怎么使用只能将光盘制作成镜像文件吗其他的文件能不能做成镜像文件
其他文件也可以制作成镜像文件
下面是使用方法
一、创建ISO文件
单击主界面的“新建”按钮,此时即可从资源管理器中拖动文件到WinISO主程序窗口中,然后只要单击“保存”按钮,在打开的保存对话框中选择保存路径并命名后,WinISO就会马上建立一个ISO文件了。
二、编辑镜像文件
在编辑之前需要首先打开一个镜像文件,单击工具栏的“打开”按钮,在打开对话框中选择一个镜像文件,比如softimg.iso,然后单击打开。WinISO可以直接打开ISO、BIN、NRG、IMG、CIF等光盘镜像文件以外,还可以打开FCD、VCD等虚拟光驱镜像文件。
1、添加文件:向镜像文件中添加文件的方法是,从资源管理器中拖动文件或文件夹至WinISO主程序窗口中,或单击“添加”按钮即可。最后单击工具栏的保存按钮保存镜像。
2、删除文件:从当前镜像文件中删除文件,首先选取要删除的文件或者文件夹,然后单击鼠标右键,执行“删除”命令,完成后,单击工具栏的保存按钮。
3、从ISO/BIN文件中提取文件:有时,我们可能只需要镜像文件中的某一个文件,那么就可以采用提取的方法。选中你需要的文件,然后点鼠标右键(或者是单击工具栏上的“提取”按钮),你会看到一个菜单,选“提取”,会打开一个“提取文件”对话框,单击“…”按钮选择保存路径,并在下方“文件”栏中选择提取的类型为当前被“选择文件”,还是提取全部镜像文件,完成后单击“确定”按钮。
windows7专业版产品密钥激活
如下是win7专业版的两款激活密钥
【key】7PR8D-49VJV-FQ8JH-PR96H-WTGYF
【Key】:FKB8J-T6PJ4-P9WCD-6RJVY-YJ2JF
激活方法如下:
一、打开桌面计算机,然后点击系统属性。然后找到windows激活窗口
二、在窗口输入激活码。显示已激活的,就说明激活成功。
-form