Programming/Mac & iOS 50

[iOS] What's new in iOS 10

SiriKit 앱 내부에서 득정 도메인에 대한 서비스를 제공할 수 있다. Intent와 Intent UI 를 활용하여 서비스를 제공가능하다. 제공 가능한 도메인은 아래와 같다. - 오디오/비디오 콜- 메시지- 결제 관련- 사진 검색- 예약 관리- 운동 일정 관리 관련 키워드 : SiriKit, Intents framework, Intents UI framework Proactive Suggestions iOS9에서 Spotlight와 Safri search results를 통해 앱의 동작이나 Depp link등을 제공할 수 있었다. iOS10에서는 사용자가 앱에서 어떤 동작들을 사용할 수 있는지 정보 제공이 가능하다. 키보드의 Quick type이나 맵, app switcher, Siri interact..

[iOS] Alcatraz : Xcode 패키지 매니저

Xcode에는 여러가지 플러그인들이 존재한다. 플러그인은 Xcode에 부가적인 기능을 제공함으로써 사용자에게 편의를 제공한다. 이번엔 앞서 말한 플러그인들을 쉽게 찾아서 쓸 수 있도록 해주는 Packgage Manager에 관한 포스팅이다. 이름은 Alcatraz!! Alcatraz.io : http://alcatraz.ioAlcatraz in Github : https://github.com/alcatraz/Alcatraz Command for installing the Alcatrazcurl -fsSL https://raw.github.com/supermarin/Alcatraz/master/Scripts/install.sh | sh 위의 URL로 Alcatraz의 기능을 파악하고, 명령어를 사용하여 ..

[iOS] '=='과 'isEqual:'의 차이

포스팅을 시작하기에 앞서 'equlity'와 'identity'의 파이를 아는 것이 중요하다. 'equality'는 값의 동일함을 의미하고, 'identity'는 메모리의 주소가 일치함을 의미한다. 'isEqual:' 메소드는 Equlity와 연관이 있다. NSObject에서의 'isEqual:' 기본 구현은 메모리 주소 비교에 기반한다. 이외에 NSObject를 상속 받은 클래스들은 'isEqual:'을 구현할 때 아래의 사항을 따른다. - 'isEqualTo___CLASSNAME___'이라는 이름의 메소드를 통해 값을 비교하도록 구현한다.. (Equality)- 'isEqual:'를 오버라이딩하여 클래스와 객체의 비교한다. (Identity)- 'hash'를 오버라이딩한다. hash는 해시 테이블 구..

[iOS] CoreData: Concurrency & Performance

Concurrency 이번엔 개발자들에게 엄청난 이점을 가져다 줌과 동시에 엄청난 짐을 안겨주는 멀티 쓰레딩에 관한 얘기다. CoreData는 Cocoa 플랫폼에서 제공하여 코드의 양을 줄이고, 사용하기 편한 데이터베이스이다. CoreData를 Concurrency하게 사용하면서 성능을 향상시키는 방법에 대해 알아 보겠다. 일단 CoreData에서는 2가지 타입의 Concurrency 옵션을 제공한다. NSMainQueueConcurrencyType와 NSPrivateQueueConcurrencyType이다. NSMainQueueConcurrencyType는 앱의 main therad에 의해서 사용되어진다. NSPrivateQueueConcurrencyType는 NSManagedObjectContext ..

[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