我的问题:
我有一个导航控制器。当我导航到应用的特定部分时,我会初始化此代码:http://rdsquared.wordpress.com/2012/10/19/circular-scrolling-inertia/
有了这个我有一个图像,我可以用手指旋转。它使用自定义委托。如果图像旋转,我按下后退按钮(或向后滑动),应用程序崩溃。
在代码中它说:
// Taking a risk here that the delegate will not change or be destroyed while we're in the middle of animating the deceleration
if (self.delegate != NULL && [self.delegate respondsToSelector:@selector(rotationDidChangeByAngle:)]) {
当应用程序崩溃时,它会在此时崩溃:(因为当用户返回时代理被破坏)
[self.delegate rotationDidChangeByAngle:changeThisFrame];
我正在尝试理解和重写代码,这就是为什么我一直指的是另一个人的源代码。
我想做什么:
我希望能够旋转图像,然后在减速时按后退按钮。 (然后让图像停在屏幕外)
任何人都可以提出代理问题的解决方法吗?请查看Ryan的源代码以获取更多信息。非常感谢你。
答案 0 :(得分:1)
在.h file中,他将委托标记为unsafe_unretained,呃,不安全。如果您将其更改为weak
,则代理将在取消分配时自动填写,这样可以防止崩溃。
或者,您的委托对象可以将循环视图的delegate
属性设置为nil,例如,在其dealloc方法中,以获得相同的结果。