이 코드는 공개하면 안되니까 혼자 주저리 하는 글이에요 - 

맵뷰를 만들어서 뷰가 새로 뜰때마다 annotation을 뗐다 붙였다 하고 있지요

나름 메모리 해제도 잘 시켜줬다 생각했는데

어째서 viewDidAppear 에서 구현했을땐 memory leak 이 발생하고

viewWillAppear 에선 안 생길까...

폰의 차이일까....

고민중....

꼭 밝혀내고 말겐서 - 


====================================================================================


늘 발생하는 문제.
시스템 인스턴스 ( ex. UIScrollView, UITextField, UITableView, MKMapView and so on)를 사용할 때 자주 delegate를 세팅해준다.
객체를 모두 사용한 후 relese를 해도 retain property가 선언되어 있으면  객체가 바로 해제되지 않는데
이때 delegate 에 계속 시그널을 보내게 된다.
따라서 이미 객체가 있던 뷰컨트롤러/뷰 객체는 사라졌는데 시스템 객체가 살아있으므로 엉뚱한 곳을 향해 시그널을 보내고 있는 격. 그래서 짜잔~ 크래쉬!!
viewwilldisappear / viewdidunload 등에 object.delegate = nil 로 꼭 세팅을 해서 연결고리를 끊어주어야 한다.


ㅠ.ㅠ 전에는 테이블뷰한테 당했는데 오늘은 맵뷰한테 당했네 ㅋ 습관화 습관화 !! (아, 그리고 ios5부터 arc를 사용하고 있지만
시스템 인스턴스의 delegate는 weak가 아닌 assign으로 되어 있기 때문에 delegate = nil 은 꼭 세팅하라고 문서에 명시되어 있다.) 

+ Recent posts