问题是:我想像gif一样在iOS设备上显示顺序图,我使用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;我称这个方法为in - (void)loadView
- (void)loadview
{
......
[self showSeqDiagram:files fileDirect:fileDir imageView:imageview];
......
}然后在呼叫位置坠毁,并将EXC_BAD_ACCESS(code=1 )抛到iPhone5模拟器和设备上,iOS verison9.3;
偶尔在iPhone6模拟器上崩溃,iOS版本9.3;
从未在iPhone6/6 6plus设备和iPhone6plus模拟器上崩溃,在iOS 7-9上进行了测试。
我知道这是错误的,但想知道为什么会这样,有人能解释一下吗?提前感谢~
发布于 2016-08-31 09:15:47
好吧,我的同事给出了答案,下面是细节:
所以showSeqDiagram不会返回任何值,所以%rax寄存器没有值,但是autoReleasePool尝试在短时间内释放%rax中的"UIImageView“obj (优先级是最低的)。在这么短的时间内,如果其他RunLoop中的某些方法覆盖%rax,那么它就不会崩溃;否则,如果没有人重写%rax,那么崩溃就会发生。
这在一定程度上可以解释为什么随机坠毁。有没有更好的答案?
https://stackoverflow.com/questions/39239889
复制相似问题