구글링하다가 어떤 사람 댓글을 읽었는데 아 뭔 말인지 모르겄다...

clarity and consistency = 명확성과 일관성을 위해 IBOutlets 는 모두 property 선언할 것을 권장한다.

첨에 뷰 로딩할 때 nib 파일을 setvalue:forkey: 형식으로 불려져서 세팅되는데

property를 retain으로 선언해놨는데 만일 뷰가 unloaded 라면 ... (아 영어와 한글을 같이 쓰는건 참 그렇다 ㅋ )

아직 뷰를 참조하고 있기 때문에 메모리 접근 문제가 생길 수 있음 ...

그래서 viewDidUnload 에 release 해야 한다네 -

(어떤 이의 말에 따르면 mac os x 에서는 멤버 변수가 default 가 no retained 라는데 

ios는 default 가 retained 라서 viewDidUnload 에서 release & set nil을 해줘야 한단다.

그렇게 명확하게 property 선언을 해놓으면 개발자가 헷갈리는 일도 없고 mac os x 와 ios 모두에서 공통적으로 사용(?)할 수 있는건가)

메모리 워닝이 발생하면 viewDidUnload 호출 후에 viewDidLoad 가 다시 호출듯 (정확하진 않음)

카메라 켜다가 자꾸 텍스트 날라가서 왜 그런가 했더니 메모리 워닝 두둥//

viewDidUnload에서  텍스트뷰 release & set nil 을 안했더니 메모리 워닝이 발생해도 텍스트는 남아있는데 왠지 찝찝하다 ㅎ;;

따로 저장해야되는건가 ;


어플을 지웠다가 다시 설치하니까 메모리 워닝 없이 잘 실행됨.

내부적으로 메모리 소모를 최소한으로 하고 워닝 발생 시 대비책을 마련해야겠다

어렵다 어려워 재밌다 재미나 ㅋ 
로컬에서 다음과 같이 호출하면 된단다...

[[UIApplication shareApplication] cancelAllLocalNotifications];
이 코드는 공개하면 안되니까 혼자 주저리 하는 글이에요 - 

맵뷰를 만들어서 뷰가 새로 뜰때마다 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