为什么我不能再存储UIWebView的UIScrollView委托属性了?

Liz*_*zza 6 iphone uiwebview uiscrollview uiscrollviewdelegate ios5

在ios5之前,我能够像这样访问UIWebView的UIScrollView委托:

for (id subview in webView1.subviews){
    if ([[subview class] isSubclassOfClass: [UIScrollView class]])  {
        UIScrollView * s = (UIScrollView*)subview;
        OldDelegate = s.delegate;//OldDelegate is type id
                    s.delegate = self;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我知道这不是正确的方法,但当时(据我所知),这是唯一的方法.iOS 5改变了这一点,所以我试图以iOS 5的方式做到这一点:

UIScrollView * s = webView.scrollView;
Olddelegate = s.delegate;
s.delegate = self;
Run Code Online (Sandbox Code Playgroud)

但无论哪种方式我尝试这样做,我的OldDelegate对象的值是0x0.保留这个委托值非常重要,但尽可能地尝试,我只是得到0x0.

有任何想法吗?

我没有使用ARC ......

j_m*_*lly 0

是的,如果您使用 arc,它可能会在未保留的 Olddelegate 上进行垃圾收集,您可以将文件标记为不使用 -fno-objc-arc 并像以前一样自行处理保留和释放。或者,您可以按照此处所述实施强引用来帮助您保留变量。https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

  • iOS 中没有垃圾收集。 (4认同)