希望有人能给我一些关于这里发生了什么的想法,因为我完全被难倒了。
我有一个全屏黑色背景UIView,其中包含一个UIActivityIndicatorView。
活动视图由以下人员创建:
mySpinner = [[iosSpinner alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
其中iosSpinner是UIActivityIndicatorView的派生类,mySpinner是
@property (strong, nonatomic, readwrite) UIView* myview; // note the UIView rather than a UIActivityIndicatorView pointer which shouldn't matter it's a base class pointer.
通过在适当的时间将mySpinner指针设置为nil来取消分配活动视图。这是由我的代码为每种视图类型手动处理,并且适用于所有视图类型。
问题在于即使使用NARC函数(new,alloc,retain,copy)创建对象,因此应该在我的控制之下,系统偶尔决定自己释放它在我已经删除它之后,产生以下崩溃/回溯:
thread #1: tid = 0x7a76a, 0x2a3cd1a4 CoreFoundation`___forwarding___ + 532, queue = 'com.apple.main-thread', stop reason = EXC_BREAKPOINT (code=EXC_ARM_BREAKPOINT, subcode=0xdefe)
* frame #0: 0x2a3cd1a4 CoreFoundation`___forwarding___ + 532
frame #1: 0x2a2fed68 CoreFoundation`_CF_forwarding_prep_0 + 24
frame #2: 0x2d899084 UIKit`-[UIActivityIndicatorView _tearDownAnimation] + 36
frame #3: 0x2d899018 UIKit`-[UIActivityIndicatorView stopAnimating] + 24
frame #4: 0x0061e312 -[iosSpinner stopAnimating](self=0x1e9aaca0, _cmd=0x2e013866) + 62 at iosSpinner.mm:40
frame #5: 0x2d89a6f8 UIKit`-[UIActivityIndicatorView dealloc] + 72
frame #6: 0x2a2cfa90 CoreFoundation`CFRelease + 596
frame #7: 0x2a2e7f70 CoreFoundation`-[__NSArrayM dealloc] + 148
frame #8: 0x37e56d56 libobjc.A.dylib`objc_object::sidetable_release(bool) + 166
frame #9: 0x37e571a8 libobjc.A.dylib`(anonymous namespace)::AutoreleasePoolPage::pop(void*) + 404
frame #10: 0x2a2dbb38 CoreFoundation`_CFAutoreleasePoolPop + 16
frame #11: 0x2d83d860 UIKit`_wrapRunLoopWithAutoreleasePoolHandler + 60
frame #12: 0x2a390844 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 20
frame #13: 0x2a38df28 CoreFoundation`__CFRunLoopDoObservers + 276
frame #14: 0x2a38e32a CoreFoundation`__CFRunLoopRun + 914
frame #15: 0x2a2dbdb0 CoreFoundation`CFRunLoopRunSpecific + 476
frame #16: 0x2a2dbbc2 CoreFoundation`CFRunLoopRunInMode + 106
frame #17: 0x3163d050 GraphicsServices`GSEventRunModal + 136
frame #18: 0x2d8a6f00 UIKit`UIApplicationMain + 1440
如您所见,它已被添加到自动释放池中。
这似乎是在用户垃圾邮件点击包含UIActivityIndicatorView的全屏视图时启用的(用户交互已启用,但由于它只是加载屏幕而没有对其收到的任何内容执行任何操作) - 它是100%可重现,但如果用户没有垃圾邮件,它可以正常工作并通过我自己的指针设置正确删除为零。
那么,在为手动控制创建UIActivityIndicatorView时,是否会出现这种情况?有没有办法判断它是否在系统控制之下,它是如何实现的?还有其他可能有帮助的东西吗?
干杯。