전체보기 238

[iOS] Initialization과 Literal

오늘은 초기화 메소드에 대한 포스팅이다. Objective-C로 개발을 하다보면 가장 많이 구현하는 부분이 초기화 메소드일 것이다. 일반적으로 아래와 같이 초기화 메소드를 사용하게 된다. -(instancetype)init{ self = [super init]; if (self) { //impelment here } return self;} 이중에서 우리가 얘기할 부분은 위에 하이라이팅된 부분이다. 굳이 메모리에 할당되어 있는 self 객체를 슈퍼클래스에서 초기화한 객체로 다시 assign하는 것일까? 주변 다른 개발자 분으로부터 그 해답을 얻었다. 우선 해답은 super class의 초기화 과정을 거치면서 할당된 메모리의 주소가 변경될 수 있기 때문이다. 메모리 주소가 초기화 과정에서 변경되는 이유는 ..

[iOS] App Extensions in iOS

App Extensions 이번 포스팅에서는 App Extension에 대해서 알아볼 것이다. iOS 8 이후로 새롭게 추가된 기능 중에 Extnesion이라는 것이 눈에 띄었다. Extension은 앱의 기능을 시스템으로 확장하여 보다 다양한 기능을 제공한다. iOS 9으로 업데이트되면서 기존에 제공하던 기능외에 다른 여러 기능들을 제공하기 시작했다. 필자의 경우, Extnesion에 관시을 가지게 된 이유는 써드 파티 키보드와 위젯 때문이었다. 그런데 상용 앱 시장에서 위젯과 키보드 뿐 아니라 이와 더불어 공유나 액션 기능도 다양하게 활용되는 것을 보았다. 그래서 기존 필자가 관심을 가지던 써드 파티 키보드나 위젯 외에 다른 Extension에 대해서 정리해야 겠다고 느끼게 되었다. 아래는 각 App..

[iOS] Automatic Retain Counting (ARC) in Objective-C & Swift

Automatic Retain Counting (ARC) Objective-C와 Swift에서 사용하는 메모리 관리 방법으로, retain count를 추적해야하는 번거로움을 개발자가 아닌 컴파일러에게 일임하는 것이다.본래의 Objective-C에서는 'retain'과 'release' 메시지를 사용함으로써 객체를 해제할지 말지를 표시했다. ARC에서는 컴파일러가 소스코드를 검사하여 컴파일된 코드 안에 'retain'과 'release' 메시지를 추가한다. ARC가 코코아의 garbage collection과 다른 점은 객체를 해제하기 위한 background-process가 별도로 존재하지 않는다는 점이다. 그리고 ARC는 Retain Cycle에 대해 자동적으로 대응할 수 없다. 그래서 개발자는 'w..

[iOS] 스레드(Thread) 사용법 & Tips

Thread 대용 Thread는 concurrency를 지원하는 방법 중 상대적으로 low-level이며 복잡한 방법이다. thread를 사용할 때 설계에 만전을 기하지 않는다면 동기화와 타이밍 문제에 직면하게 될 것이다. 또 thread를 굳이 써야할 정도의 task인지를 확실하게 정의해야 한다. thread는 CPU와 메모리에 어마어마한 overhead를 부여하게된다. 굳이 이런 overhead를 감내할 필요가 없다면 아래 설명하는 thread의 대용품들을 사용하자. -Operation objects NSOperation & NSOperationQueue -Grand Central Dispatch (GCD) Grand Central Dispatch -Idle-time notifications NSNo..

[iOS] NULL, nil, Nil, NSNull

iOS에서는 null을 표현하는 4가지의 방법이 존재한다. 필자도 NSNull과 nil만 구분하면서 써왔지만 이외에도 NULL과 Nil라는 2가지가 더 있다는 사실을 근래에 알았다. 차이는 위의 표와 같다. NSNull은 객체가 삽입되어야만 하는 상황에서 null을 표현하는 방식으로 collection 객체에서 null을 표현할 때, 사용하면 좋다. nil은 iOS 개발자들이 평소에 자주 애용하듯이 객체의 부재를 나타내는 null을 표현하는데 사용한다. 그러면 유의깊게 보지 않았다면 몰랐을 NULL과 Nil은 무엇인가 NULL은 C 포인터의 reference value의 null을 표시한다. Nil은 Objective-C에서 클래스의 부재를 나타내는 null을 표시한다. 이를 유의해서 사용하면 보다 정교..

[iOS] self와 _의 차이

클래스에서 선언한 변수에 접근하는 방법은 크게 2가지이다. self라는 지시어를 통한 접근과 '_'를 통한 접근이다. self라는 지시어를 통한 접근은 클래스에서 접근자를 이용한 접근이다. '_'는 클래스 내부에서 변수에 직접 접근하는 방법이다. 그렇다면 이 둘은 어떻게 다를까? self를 통한 접근은 property로 생성한 접근자를 통한 접근이다. 그래서 property에서 선언한 attribute에 따라 retain을 수행한다. 하지만 '_'를 통한 접근은 메모리 관리에 대한 동작을 수행하지 않는다. 이러한 차이는 ARC를 사용하지 않는 환경에서 유효하다. property의 attribute에 관한 글 참조 : http://goo.gl/vbDbQa

[iOS] KVC, KVO

KVC (Key-Value-Coding) KVC는 문자열을 이용해 property에 접근할 수 있게 해주는 기능이다. 접근자를 이용하지 않고 property의 이름인 문자열로 접근하므로, 객체간 의존성을 낮추고 결합도가 낮은 소프트웨어 개발을 할 수 있게 해준다. KVC를 구현한 메소드는 NSKeyValueCoding 프로토콜에 의해 정의되며, NSObject는 이 프로토콜을 implement한 상태이다. KVC는 아래와 같은 로직으로 동작한다. 1. key와 일치하는 property를 찾는다.2. 일치하는 property가 없을 경우, key와 일치하는 인스턴스 변수를 찾는다. 3. 일치하는 property나 인스턴스 변수가 있으면, 이를 적용한다. 없으면 'valueForUndefinedKey:'나 ..

[iOS] @property, @synthesize, @dynamic

@property 클래스 내의 멤버 변수에 대하여 접근자를 생성한다. @property를 사용할 경우, 추가로 attribute를 부여할 수 있다. attribute들은 아래와 같다. '*'로 표시된 attribute는 선언하지 않아도 기본적으로 적용되는 attribute들이다. getter= : 접근자 중 getter의 메소드 이름을 정의한다. setter= : 접근자 중 setter의 메소드 이름을 정의한다. readwrite * : getter/setter를 모두 만든다. Mutually exclusive로 readwrite를 한다. readonly : 오직 getter만 생성한다. 해당 property에 값을 할당하려고 하면 컴파일 오류가 발생한다. assign * : setter를 통해 간단한 ..

[watchOS] Complication in Apple watch (watchos 2.0 or above)

Complication은 복잡한 요소를 말하는 것으로 시계에서 시간을 가르쳐주는 페이스를 제외한 부속 화면 등을 얘기한다. watchOS2.0으로 업데이트되면서 Apple watch는 Complication을 지원하게 됬다. 사용자에세 간략한 정보를 신속하게 실시간(실제로는 사용자가 보는 순간)으로 업데이트하고 싶을 때 사용하면 좋다. 단, 여기서 중요한 것은 '간략한'이다. 데이터 처리 혹은 네트워크를 활용한 데이터 접근 등의 overload가 많은 데이터 처리는 삼가는 것이 좋다. 이를 위해 watch app 내부에 data를 캐싱하는 것도 좋은 방법이다. 이제 Complication에 대해 하나씩 알아보자. Complication은 모두 5가지의 family를 제공한다. 5가지의 모양을 가지고 있는..

[iOS] Fast Lane 통합 관리 툴 for iOS & android

Fastlane은 iOS 프로젝트에 관한 전반적인 관리 툴이다. Fastlane은 다른 여러 유틸과 연계되어 다양한 서비스를 제공한다. 그 중, 필자가 사용해봤고 유용한 툴 몇가지를 소개한다. *'sudo gem install [PACKAGE_NAME]'을 사용하여 설치할 때, El Capitan에서 권한 이슈에 부딪혀 설치가 안 되는 케이스가 발생한다. 이럴 때는 'vi ~/.gemrc'로 문서를 만들어 'gem: -n/usr-local/bin'을 추가해주도록 하자. 이는 시스템 bin 디렉토리의 접근 권한이 없어서 생기는 문제로 local 디렉토리로 설치 경로를 옮겨 해결할 수 있다. Cert. 인증서 생성 및 갱신 Sigh. 프로비저닝 프로파일 생성 및 갱신 Pem. APNS 프로파일 생성 및 갱신..