캐시 할 때는 당연히 NSCache를 썼는데 왜 쓰는지에 대해 깊게 생각하지 않았었다.

이전에 했던 프로젝트 중에 NSDictionary로 캐시 구현한게 있길래 구체적으로 차이점을 짚어 보려고 한다.


결론부터 말하면 딕셔너리보다는 NSCache 가 더 유용하다.


1. NSCache는 메모리 관리가 기본적으로 제공된다.

다른 앱에서 메모리를 더 사용하려고 하면 캐시되어 있던 데이터를 지우고 메모리를 해제한다.


2. NSCache는 Thread-safe 하다.

캐시 데이터를 읽고 쓰고 지울때마다 따로 lock을 해줄 필요가 없다.

반면 NSDictionary는 Threadd-safe 하지 않기 때문에 데이터 접근할 때 따로 처리해줘야 한다.


3. NSDictionary는 Key 값을 copy하지만 NSCache는 retain 카운트만 증가 시킨다.

복사를 지원하지 않는 객체까지 포용한다.



[ 관련 클래스 ]


NSDiscardableContent

객체를 더이상 사용하지 않을 때 바로 메모리 해제할 수 있는 메소드가 정의되어 있는 프로토콜


NSPurgeableData

NSMutableData를 상속받으며 NSDiscardableContent 프로토콜이 구현되어 있음



* 참고문서 : https://developer.apple.com/documentation/foundation/nscache


크롬만 쓰다보니 사파리에 무지하다.

플젝 웹뷰 디버깅 얘기하다가 사파리도 가능하다는 정보를 입수.


사파리 설정에서 마지막 탭에 개발자 도구 체크박스로 켜고

휴대폰 사파리 설정에서 웹속성 켜면

웹뷰디버깅 가능!!


그러나 나는 크롬빠라 쓰진 않을 듯;;


***사파리 설정 외에 프로젝트에도 설정 추가해야 사용할 수 있음.

[preferences setValue:@YES forKey:@"developerExtrasEnabled"];



p.s 이건 ㅈㄴㄱㄷ 얘기 나온 웹 디버깅 툴

https://www.telerik.com/fiddler

iOS9 부터 AddressBook framework 가 deprecated 돼서 CNContact framework 를 사용하게 됐다.

그런데 시작부터 문제가 스물 스물 발생. 그 중 대표 이슈만 정리해 본다.


#1 NavigationBar is hidden on CNContactViewController for Unknown and it never shows up again.


이 문제는 전세계 ios 앱 개발자에게 깊은 빡침을 선사했다.


[CNContactViewController viewControllerForUnknownContact:] 로 호출된 vc에서 연락처 공유 / 기존의 연락처에 추가 등의 메뉴를 선택하면 새 화면이 present 로 뜨면서 앱의 네비게이션바가 hidden 된다. 그리고 이 화면을 dismiss하면 기존의 네비게이션바가 나타나야 하는데 보이지 않는다.

AddressBook에선 잘 됐는데.. 에헤이 이 사람들 일을 하다 말았넹..


이전 화면으로 돌아가기 위해선 앱을 재 실행하는 수밖에 없다. ㅠㅁㅠ


작년 WWDC 에서 (따지는 표정으로)물어볼 겸 찾아갔는데 contact 프레임웍 유닛을 만날 수 있는 시각을 오해해서 이미 집에 가고 없었다. 안돼 ㅠㅡㅠ 

그래도 다른 파트 사람한테 설명해주고 프레임웍에 무슨 문제가 있는지 같이 확인 후 연락기다리겠다고 하고 헤어졌는데 iOS10이 릴리즈됐을 때도 변화 없길래 걍 포기.


올해에 커스터마이징 해야지 하고 있었는데 오옷!!

어제 확인해보니 언제 수정됐는지도 모르게 정상동작한다. 단, iOS 10 이상에서만.

애증의 애플... 이런 기본적인 기능은 잘 구현해줬으면 좋겠다.



// NOTICE:  I realized navigationbar hidden issue has fixed for iOS10 only.



#2 CNContactViewController를 push 했을 때 발생하는 UI 문제.


View의 좌측 끝 부분 터치가 안된다. 하지만 모달로 구현하면 잘 동작해서 의아함. 



#3 Left button is disappeared after selecting menu on Unknown ViewController


문제가 발생하는 동선은 다음과 같다.

1. 좌측에 닫기 버튼 나오도록 세팅하고 모달로 띄움.

2. 새 연락처로 등록으로 들어가 완료 버튼 누르면 화면이 닫히면서 네비게이션바가 나타남. 

3. 우측에 파란색 편집 버튼이 생기는데 좌측에 넣었던 close 버튼이 사라짐.

=> 10.2 이상에서는 닫기 버튼이 살아있으나 오른쪽 편집 버튼 파란색인 현상은 그대로임.


뭔가 동작이 이상한데 unknown 뷰의 메뉴를 선택하고 닫을 때 이벤트를 받을 수가 없다.

편집 버튼이 나타나면서 이상해지길래 allowsEditing = NO 로 세팅했더니 편집 기능을 사용할 수 없지만 네비 바의 버튼들이 이상해지는 문제는 막을 수 있다.

이 완벽하지 않은 해결에 찝찝해하며 일단 이 이슈는 여기까지 정리하는 걸로!!

+ Recent posts