Skip to content
This repository was archived by the owner on Jul 1, 2020. It is now read-only.

Commit bd5ccfc

Browse files
fix:#31 Memory leaks of tableview
1 parent 95a1a6f commit bd5ccfc

18 files changed

Lines changed: 142 additions & 81 deletions

Demo/Demo/ConfigBannerController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ class ConfigBannerController: UIViewController {
2020
left.setText("👉滑动关闭", mode: .scrollToAction)
2121
left.setText("松开关闭", mode: .releaseToAction)
2222
left.textLabel.textColor = UIColor.orange
23-
scrollView.configSideRefresh(with: left, at: .left) {
23+
scrollView.configSideRefresh(with: left,container:self, at: .left) {
2424
self.navigationController?.popViewController(animated: true)
2525
};
2626

2727
let right = DefaultRefreshRight.right()
2828
right.setText("👈滑动关闭", mode: .scrollToAction)
2929
right.setText("松开关闭", mode: .releaseToAction)
3030
right.textLabel.textColor = UIColor.orange
31-
scrollView.configSideRefresh(with: right, at: .right) {
31+
scrollView.configSideRefresh(with: right, container:self, at: .right) {
3232
self.navigationController?.popViewController(animated: true)
3333
};
3434
}

Demo/Demo/ConfigHeaderFooterController.swift

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,14 @@ class ConfigDefaultHeaderFooterController: UITableViewController {
2525
header.tintColor = UIColor.orange
2626
header.imageRenderingWithTintColor = true
2727
header.durationWhenHide = 0.4
28-
self.tableView.configRefreshHeader(with: header) { [unowned self] in
28+
self.tableView.configRefreshHeader(with: header,container:self) { [weak self] in
2929
delay(1.5, closure: {
30-
self.models = self.models.map{_ in random100()}
31-
self.tableView.reloadData()
32-
self.tableView.switchRefreshHeader(to: .normal(.success, 0.3))
30+
guard let vc = self else{
31+
return;
32+
}
33+
vc.models = vc.models.map{_ in random100()}
34+
vc.tableView.reloadData()
35+
vc.tableView.switchRefreshHeader(to: .normal(.success, 0.3))
3336
})
3437
};
3538
let footer = DefaultRefreshFooter.footer()
@@ -39,14 +42,17 @@ class ConfigDefaultHeaderFooterController: UITableViewController {
3942
footer.setText("Tap to load more", mode: .tapToRefresh)
4043
footer.textLabel.textColor = UIColor.orange
4144
footer.refreshMode = .tap
42-
self.tableView.configRefreshFooter(with: footer) { [unowned self] in
45+
self.tableView.configRefreshFooter(with: footer,container:self) { [weak self] in
4346
delay(1.5, closure: {
44-
self.models.append(random100())
45-
self.tableView.reloadData()
46-
if self.models.count > 18{
47-
self.tableView.switchRefreshFooter(to: .removed)
47+
guard let vc = self else{
48+
return;
49+
}
50+
vc.models.append(random100())
51+
vc.tableView.reloadData()
52+
if vc.models.count > 18{
53+
vc.tableView.switchRefreshFooter(to: .removed)
4854
}else{
49-
self.tableView.switchRefreshFooter(to: .normal)
55+
vc.tableView.switchRefreshFooter(to: .normal)
5056
}
5157
})
5258
}

Demo/Demo/DefaultBannerController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ class DefaultBannerController: UIViewController {
1717
self.navigationItem.title = "Banners"
1818
self.automaticallyAdjustsScrollViewInsets = false
1919
setUpViews()
20-
scrollView.configSideRefresh(with: DefaultRefreshLeft.left(), at: .left) {
20+
scrollView.configSideRefresh(with: DefaultRefreshLeft.left(),container:self, at: .left) {
2121
self.navigationController?.popViewController(animated: true)
2222
};
23-
scrollView.configSideRefresh(with: DefaultRefreshRight.right(), at: .right) {
23+
scrollView.configSideRefresh(with: DefaultRefreshRight.right(),container:self, at: .right) {
2424
let nvc = DefaultBannerController()
2525
self.navigationController?.pushViewController(nvc, animated: true)
2626
};

Demo/Demo/DefaultCollectionViewController.swift

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,19 @@ class DefaultCollectionViewController:UIViewController,UICollectionViewDataSourc
1616
override func viewDidLoad() {
1717
self.view.backgroundColor = UIColor.white
1818
self.setUpCollectionView()
19-
self.collectionView.configRefreshHeader(with: DefaultRefreshHeader.header()) { [unowned self] in
19+
self.collectionView.configRefreshHeader(container:self) { [weak self] in
2020
delay(1.0, closure: {
21-
self.collectionView.switchRefreshHeader(to: .normal(.success, 0.5));
21+
self?.collectionView.switchRefreshHeader(to: .normal(.success, 0.5));
2222
});
2323
}
24-
self.collectionView.configRefreshFooter(with: DefaultRefreshFooter.footer()) { [unowned self] in
24+
self.collectionView.configRefreshFooter(container:self) { [weak self] in
2525
delay(1.0, closure: {
26-
self.count = self.count + 3
27-
self.collectionView.reloadData()
28-
self.collectionView.switchRefreshFooter(to: .normal)
26+
guard let vc = self else{
27+
return;
28+
}
29+
vc.count = vc.count + 3
30+
vc.collectionView.reloadData()
31+
vc.collectionView.switchRefreshFooter(to: .normal)
2932
});
3033
};
3134

Demo/Demo/DefaultScrollViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class DefaultScrollViewController:UIViewController{
2020
let header = DefaultRefreshHeader.header()
2121
header.textLabel.textColor = UIColor.white;
2222
header.spinner.activityIndicatorViewStyle = .white
23-
scrollView.configRefreshHeader(with: header) {
23+
scrollView.configRefreshHeader(with: header,container:self) {
2424
delay(1.0, closure: {
2525
self.scrollView.switchRefreshHeader(to: .normal(.success, 0.5));
2626
})

Demo/Demo/DefaultTableViewController.swift

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,24 +26,27 @@ class DefaultTableViewController:UITableViewController{
2626
override func viewDidLoad() {
2727
super.viewDidLoad()
2828
self.tableView.tableFooterView = UIView(frame: CGRect.zero)
29-
self.tableView.configRefreshHeader(with: DefaultRefreshHeader.header()) { [unowned self] in
29+
self.tableView.configRefreshHeader(container:self) { [weak self] in
3030
delay(1.5, closure: {
31-
self.models = self.originalModes.map{_ in random100()}
32-
self.tableView.switchRefreshHeader(to: .normal(.success, 0.5))
33-
self.tableView.reloadData()
34-
})
35-
}
36-
self.tableView.configRefreshFooter(with: DefaultRefreshFooter.footer()) { [unowned self] in
37-
delay(1.5, closure: {
38-
self.models.append(random100())
39-
self.tableView.reloadData()
40-
if self.models.count < 18 {
41-
self.tableView.switchRefreshFooter(to: .normal)
42-
}else{
43-
self.tableView.switchRefreshFooter(to: .noMoreData)
31+
guard let vc = self else{
32+
return;
4433
}
34+
vc.models = vc.originalModes.map{_ in random100()}
35+
vc.tableView.switchRefreshHeader(to: .normal(.success, 0.5))
36+
vc.tableView.reloadData()
4537
})
46-
};
38+
}
39+
// self.tableView.configRefreshFooter(with: DefaultRefreshFooter.footer()) { [weak self] in
40+
// delay(1.5, closure: {
41+
// self.models.append(random100())
42+
// self.tableView.reloadData()
43+
// if self.models.count < 18 {
44+
// self.tableView.switchRefreshFooter(to: .normal)
45+
// }else{
46+
// self.tableView.switchRefreshFooter(to: .noMoreData)
47+
// }
48+
// })
49+
// };
4750
self.tableView.switchRefreshHeader(to: .refreshing)
4851
}
4952
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
@@ -61,7 +64,6 @@ class DefaultTableViewController:UITableViewController{
6164
return cell!
6265
}
6366
deinit{
64-
self.tableView.invalidateRefreshControls()
6567
print("Deinit of DefaultTableViewController")
6668
}
6769
}

Demo/Demo/DefaultWebViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class DefaultWebViewController: UIViewController,UIWebViewDelegate{
1818
self.webview.autoresizingMask = [.flexibleWidth,.flexibleHeight]
1919
self.webview.backgroundColor = UIColor.white
2020
view.addSubview(self.webview)
21-
self.webview.scrollView.configRefreshHeader(with: DefaultRefreshHeader.header()) {
21+
self.webview.scrollView.configRefreshHeader(container:self) {
2222
if self.webview.request != nil{
2323
self.webview.reload()
2424
}else{

Demo/Demo/DianpingTableviewController.swift

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@ class DianpingTableviewController:BaseTableViewController{
1313
override func viewDidLoad() {
1414
super.viewDidLoad()
1515
//Setup
16-
self.tableView.configRefreshHeader(with: DianpingRefreshHeader()) { [unowned self] in
16+
self.tableView.configRefreshHeader(with: DianpingRefreshHeader(),container:self) { [weak self] in
1717
delay(1.5, closure: {
18-
self.models = self.models.map{_ in random100()}
19-
self.tableView.reloadData()
20-
self.tableView.switchRefreshHeader(to: .normal(.none, 0.0))
18+
guard let vc = self else{
19+
return;
20+
}
21+
vc.models = vc.models.map{_ in random100()}
22+
vc.tableView.reloadData()
23+
vc.tableView.switchRefreshHeader(to: .normal(.none, 0.0))
2124
})
2225
};
2326
self.tableView.switchRefreshHeader(to: .refreshing)

Demo/Demo/ElasticHeaderTableViewController.swift

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,14 @@ class ElasticHeaderTableViewController:BaseTableViewController{
1414
override func viewDidLoad() {
1515
super.viewDidLoad()
1616
let elasticHeader = ElasticRefreshHeader()
17-
self.tableView.configRefreshHeader(with: elasticHeader) { [unowned self] in
17+
self.tableView.configRefreshHeader(with: elasticHeader,container:self) { [weak self] in
1818
delay(1.5, closure: {
19-
self.models = self.models.map{_ in random100()}
20-
self.tableView.reloadData()
21-
self.tableView.switchRefreshHeader(to: .normal(.success, 0.5));
19+
guard let vc = self else{
20+
return;
21+
}
22+
vc.models = vc.models.map{_ in random100()}
23+
vc.tableView.reloadData()
24+
vc.tableView.switchRefreshHeader(to: .normal(.success, 0.5));
2225
})
2326
};
2427
}

Demo/Demo/MainViewController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ class MainViewController: UITableViewController {
4747
models.append(section2)
4848
models.append(section3)
4949
let header = DefaultRefreshHeader.header()
50-
self.tableView.configRefreshHeader(with: header) { [unowned self] in
50+
self.tableView.configRefreshHeader(with: header,container:self) { [weak self] in
5151
delay(2, closure: {
52-
self.tableView.switchRefreshHeader(to: .normal(.success, 0.5))
52+
self?.tableView.switchRefreshHeader(to: .normal(.success, 0.5))
5353
})
5454
}
5555
self.tableView.tableFooterView = UIView(frame: CGRect.zero)

0 commit comments

Comments
 (0)