ViewController.m
首先遵循UIScrollViewDelegate
UIScrollView *scrollerView = [[UIScrollView alloc] init];
scrollerView.frame = CGRectMake(100, 100, 200, 200);
scrollerView.backgroundColor = [UIColor orangeColor];
scrollerView.contentSize = CGSizeMake(300, 300);
scrollerView.clipsToBounds = NO;
[self.view addSubview:scrollerView];
scrollerView.delegate = self;
当rootViewController指针指向controller -> 控制器死不掉
controller有一个view属性 -> view属性强引用了view对象(strong) ->保证了只要控制器在,view就在
view有一个属性是subviews -> 这个属性是一个数组对象(强引用)
将scrollerView添加到view上,其实就是将scrollerView放进数组对象中,假如是数组的第0个位置,就是说数组的第0个位置保存着scrollerView的内存地址,相当于数组中第0个位置有个指针指向了保存着scrollerView的内存地址,即数组强引用了这个scrollerView对象
UIScrollView 有个属性叫delegate,一般这个属性是控制器,假如是强引用,那么就导致了循环引用,导致最后谁都释放不了 ,原因: 即使将来rootViewcontroller不再是当前控制器,那么就要释放当前的控制器,可是此时UIScrollView的对象的属性在强引用着这个controller,导致无法释放controller,导致controller的view属性无法释放,导致scrollerView无法释放,导致controller无法释放
所以代理用weak,弱引用,那么控制器被销毁的时候,就没有强指针指向它,那么它就会被销毁,那么它指向其他的指针也就被销毁,view没有强指针,即view被释放,然后subViews数组被释放,然后scrollerView被释放
代理的规律:用来监听控件的某些行为,是id修饰,但是一般是controller,也可以是其他任意对象,用弱指针修饰防止循环引用