use*_*906 5 iphone xcode objective-c ios
我已经创建了一个UIView
子类来处理iAds和adMob.视图控制器是子类委托,一切正常.但有时,视图控制器会在获取广告之前消失.为了解决这个问题,我在视图控制器的实现中设置了delegate
to .nil
dealloc
我respondsToSelector:
遇到的问题是,有时该方法在视图控制器被取消分配的同时运行.这会导致崩溃.有谁知道我如何重新排列这个?
广告视图位于大约10个不同的视图控制器上,因此我希望有一个位置来创建广告代码.
非常感谢
一种简单的方法是保留视图,直到您有机会将委托设置为nil,然后释放它.然后,您可以确保对象仍然存在并防止崩溃.
如果无法保留视图,则使用静态方法获取在dealloc中清除的实例.即:而不是:
if (delegate && [delegate respondsToSelector:@selector(...)])
Run Code Online (Sandbox Code Playgroud)
做这个:
if (s_myViewDelegate && [delegate respondsToSelector:@selector(...)])
Run Code Online (Sandbox Code Playgroud)
在课堂里:
- (id) init {
s_myViewDelegate = self;
...etc...
}
- (void) dealloc {
s_myViewDelegate = nil;
}
Run Code Online (Sandbox Code Playgroud)