问题出在这里:我想在iOS设备上显示序列图,如gif效果,并且我使用UIImageView动画功能,所以在下面实现一个方法:
// Animation.m
// @files: diagrams' array
// @fileDir: file directory
// @imageview: Just UIImageView
//
- (void)showSeqDiagram:(NSArray*)files
fileDirect:(NSString*)fileDir
imageView:(UIImageView*)imageview
{
int cnt = [files count];
NSMutableArray * images = [NSMutableArray arrayWithCapacity:cnt];
for (id file in files)
{
NSString * imageName = [NSString stringWithFormat:@"%@/%@", fileDir, file];
UIImage * image = [UIImage imageNamed:imageName];
if(!image)
continue;
[images addObject:image];
}
imageview.animationImages = images;
imageview.animationDuration = 5;
imageview.animationRepeatCount = 1;
[imageview startAnimating];
}
到目前为止,情况进展顺利。我在头文件中声明 返回类型 是错误的,如下所示:
//Animation.h
- (UIImageView*)showSeqDiagram:(NSArray*)files
fileDirect:(NSString*)fileDir
imageView:(UIImageView*)imageview;
我在 - (void)loadView
中调用此方法- (void)loadview
{
......
[self showSeqDiagram:files fileDirect:fileDir imageView:imageview];
......
}
然后在调用位置崩溃并在iPhone5模拟器和设备上抛出EXC_BAD_ACCESS(代码= 1,),iOS verison9.3;
偶尔会在iOS6版本的iPhone6模拟器上崩溃;
从未在iPhone 6 / 6plus设备和iPhone6plus模拟器上崩溃,在iOS 7-9上测试过。
我知道这是错的,但想知道为什么会发生这种情况,有人可以解释一下吗?提前谢谢〜
答案 0 :(得分:0)
好吧,我的同事回答了,详情如下:
因此showSeqDiagram不会返回任何值,因此%rax寄存器没有值,但autoReleasePool尝试在短时间后(%strong优先级)释放%rax中的“UIImageView”obj。在这么短的时间内,如果其他RunLoop中的其他一些方法覆盖%rax,那么它就不会崩溃;否则,如果没有人重写%rax,那就崩溃了。
这可以部分解释为什么随机崩溃。还有更好的答案吗?