본문 바로가기
[ios/reference] Core Animation [ios/reference] Core Animation https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40004514-CH1-SW1 -Core Animation 은 iOS, OS X 모두에 속하는 animation 에 대한 infra structure 이다. -몇 가지 설정만 해주면, 알아서 animation 을 만들어 수행한다.animation 에 대한 수행은 안쪽에서 알아서 hardware 가속 등을 사용해 rendering 한다. -Core Animation 은 UIKit/ AppKit 아래.. 2017. 11. 19.
[ios/design pattern] private 메서드 정의하기 [ios/design pattern] private 메서드 정의하기 -Objective-C 은 public/private 같은 접근제어하는 것이 없음.다시 이야기하자면 모든 method 가 사실 public 이다. -.m 파일의 implemetation 에서만 함수를 정의해서 사용하는 것은 private 으로 여길 수 있겠지만,.h 에 선언되어 있지 않기 때문에 warning 이 표시된다. ( 실제로는 option 에 따라 warning 이 표시 안 되기도 )( iOS 는 동적 언어라 compile 은 되고 실행도 되긴 한다. ) -이를 해결하기 위해서는 Private 전용 Category 를 만들고,모든 private method 에는 p_ 접두어를 붙이는 것으로 해결할 수 있다.// .m 파일@int.. 2017. 10. 23.
[Effective Objective-C] #51 initialize 와 load 메서드는 간결하게 만들라 [Effective Objective-C] #51 initialize 와 load 메서드는 간결하게 만들라 출처 : Effective Objective-C -오브젝티브-C 에서 최상위 클래스인 NSObject 를 상속한 대다수 클래스에는 초기화를 할 수 있는 몇 가지 메서드가 있다.이 메서드들 중 첫 번째는 load 이고 프로토타입은 다음과 같다.+ (void)load -클래스와 카테고리가 런타임에 추가될 때 이 메서드가 딱 한 번 호출된다.이는 클래스 또는 카테고리를 포함하는 라이브러리가 로드될 때, 즉 일반적으로 앱이 처음 실행(launch)될 때 일어난다.하지만 iOS 용 앱일 때만 해당된다.맥 OS X 앱은 동적 로딩(dynamic loading)같은 기능을 자유롭게 쓸 수 있다.그렇기 때문에 앱.. 2017. 10. 19.
[Effective Objective-C] #50 캐시가 필요할 때 NSDictionary 보다는 NSCache 를 사용하라 [Effective Objective-C] #50 캐시가 필요할 때 NSDictionary 보다는 NSCache 를 사용하라 출처 : Effective Objective-C -맥 OSX 또는 iOS 앱을 개발할 때 대부분의 경우 캐싱을 어떻게 구현할지 정해야 한다.첫 번재로 해볼만한 방법은 사전을 이용해 메모리에 저장하는 것이다.경험이 없는 개발자는 간단하게 NSDictionary 를 사용할 것이다.많이 사용되는 클래스이기 때문이다.그러나 Foundation 프레임워크의 NSCache 가 정확히 이런 용도로 설계되었기 때문에 이 클래스를 사용하는 것이 훨씬 좋다. -NSDictionary 에 비해 NSCache 가 지닌 장점은 시스템 메모리가 꽉 차면 자동으로 캐시의 메모리가 정리된다는 것이다.사전을 캐.. 2017. 10. 18.
[Effective Objective-C] #47 시스템 프레임워크를 숙지하라 [Effective Objective-C] #47 시스템 프레임워크를 숙지하라 출처 : Effective Objective-C -시스템 프레임워크가 없어도 오브젝티브-C 를 사용할 수 있지만 그런 일은 매우 드물다.표준 최상위 클래스 NSObject 조차도 언어에 포함되어 있는 것이 아니라 Foundation 프레임워크에 포함되어 있다.Foundation 을 쓰는 것을 원하지 않으면 자신만의 최상위 클래스 뿐 아니라 자신만의 컬렉션, 이벤트 루프, 다른 유용한 클래스를 직접 만들어야 한다.게다가 시스템 프레임워크 없이 맥 OS X 와 iOS 앱을 오브젝티브-C 로 개발할 수 없다. -어떤 시스템 프레임워크가 있는지 모른다면 이미 만들어진 것도 또 다시 직접 모두 작성해야 할 것이다. -프레임워크는 동적 .. 2017. 10. 14.
[Effective Objective-C] #46 dispatch_get_current_queue 사용을 피하라 [Effective Objective-C] #46 dispatch_get_current_queue 사용을 피하라 출처 : Effective Objective-C -GCD 를 사용하면서 특히 여러 큐에 디스패칭할 때 어떤 큐가 현재 실행되고 있는지 알아내야 하는 경우가 흔히 있다.dispatch_queue_t dispatch_get_current_queue() 이 함수가 하는 일은 현재 실행되고 있는 큐를 반환하는 것이라고 문서에 나와 있다.그러나 주의 깊게 다루어야 한다.사실 이 함수는 iOS 6.0 에서 공식적으로 폐기되었다.그러나 맥 OS X 10.8에서는 폐기되지 않았다.그렇다 하더라도 맥 OS X 에서도 사용을 피해야 한다. -이 메서드를 흔히 사용하게 되는 전형적인 안티패턴(anti patter.. 2017. 10. 13.
[ios] 권장되는 permission guide [ios] 권장되는 permission guide http://techcrunch.com/2014/04/04/the-right-way-to-ask-users-for-ios-permissions/ -Pre-permission dialog 를 사용한다. iOS 의 permission 수락 다이어로그를 띄우기 전에 요청할 권한에 대해 설명하는 UI 를 가진 dialog 를 사용한다. -Double System-Style Dialog Pre-permission dialog 를 system style 로 만드는 것이 좋다. 친절한 설명이 곁들여진 곳에서 Access 를 허용한 후 실제 ios 에서 Don’t allow 를 선택한 경우는 3%. 두 번 물어보는 것이 짜증나는 액션일 수는 있지만, 확실하게 allow.. 2017. 10. 11.
[Effective Objective-C] #37 블록을 이해하라 [Effective Objective-C] #37 블록을 이해하라 출처 : Effective Objective-C -맥 OS X 내에서 UI 스레드가 멈추면 그 무시무시한 돌고 있는 비치볼을 보게 될 것이다.iOS 에서는 앱이 너무 오랫동안 멈추어 있으면 강제로 종료될 것이다. -멀티스레딩의 핵심 기술은 블록과 GCD(Grand Central Dispatch) 다.블록은 C, C++. 오브젝티브-C 에 렉시컬 클로저(lexical closure)를 제공하는데 이는 매우 유용하다.( 클로저는 함수 내에 함수를 선언할 수 있게 하는 기능이다. 리스프 계열 언어에서 많이 쓰이며, 내부에 선언된 함수는 외부 함수의 파라미터들을 참조할 수 있다. )블록은 코드를 전달하는 기법을 제공한다. -GCD는 스레딩을 이른.. 2017. 10. 1.
[Effective Objective-C] #34 오토릴리스 풀을 사용하여 최고 메모리 사용량을 낮춰라 [Effective Objective-C] #34 오토릴리스 풀을 사용하여 최고 메모리 사용량을 낮춰라 출처 : Effective Objective-C -오브젝티브-C 의 Reference cout 아키텍처의 기능 중 하나는 오토릴리스 풀이다.객체를 릴리스한다는 것은 release 를 호출하여 객체의 리테인 수를 즉시 줄이거나 autorelease 를 호출해 객체를 오토릴리스 풀에 추가하는 것을 말한다.오토릴리스 풀은 미래의 특정 시점에 릴리스해야 할 객체의 집합으로 사용된다.풀이 마르면, 그 때 풀의 모든 객체에 release 메시지를 보낸다.@autoreleasepool { // ...} -객체에 autorelease 메시지를 보냈을 때 적절한 오토릴리스 풀이 없다면 콘솔(console)에서 다음과 .. 2017. 9. 28.
반응형