앱등이에게 살충제를 뿌린다./Apple Dev Reference
-
[Apple Dev Reference - Advanced Swift] Initialization (1)앱등이에게 살충제를 뿌린다./Apple Dev Reference 2016. 10. 24. 23:55
Initialization은 Class, Structure, Enumeration의 인스턴스를 만드는 과정을 말한다. 이 과정에서 프로퍼티의 값을 초기화하거나 초기화에 필요한 작업을 수행하게 된다. 이러한 작업은 개발자가 initializer를 구현하여 수행할 수 있다. initializer는 조금 특별한 메소드라고 생각할 수 있는데, 클래스의 인스턴스나 구조체 등을 만들 때 호출된다. Objective-C의 initializer와 달리 Swift의 initializer는 리턴 값이 없다. 그저 인스턴스를 사용하기 전에 객체에 대한 초기화를 수행할 뿐이다. Class객체는 deinitializer를 구현할 수도 있다. deinitializer는 인스턴스가 메모리에서 해제되기 전에 호출된다. 이 또한 개발..
-
[Apple Dev Reference] Nullability and Objective-C앱등이에게 살충제를 뿌린다./Apple Dev Reference 2016. 5. 22. 18:04
Nullability and Objective-C글 하단에 3줄요약 해놓음 Swift와 Objective-C를 한 프로젝트에서 같이 사용할 수 있다는 것. Swift의 장점 중 하나입니다.(이걸 장점이라고 해야하나 모르겠네요) 하지만 Objective-C와 Swfit에는 명백히 많은 차이점이 존재합니다. 그 중 하나를 예로 들어보겠습니다. Swift에는 Optional타입과 non-Optional타입이 존재합니다. NSView와 NSView?같이 말이죠. 반면에, Objective-C에는 딱 하나 NSView *만 존재하고 있습니다. 이 차이점으로 인해 컴파일러는 혼돈이 생길 수 밖에 없습니다. NSView *가 Optional인지 non-Optional인지 알 도리가 없는거죠. 따라서 현재(Swift2..
-
[Apple Dev Reference - Swift] Nonescaping Closures앱등이에게 살충제를 뿌린다./Apple Dev Reference 2016. 5. 22. 14:50
Nonescaping Closures함수의 파라미터로 클로져가 전달될 때가 있습니다. 이 때, 함수가 종료된 후에도 함수 외부에서 파라미터인 클로져를 사용하는 경우가 있습니다. 이 경우 우리는 클로져가 escape(탈출)되었다고 합니다. 그리고 함수를 정의할 때, 클로져 파라미터에 @noescape키워드를 사용하여 escape하지 않는 클로져라는걸 명시해줄 수 있습니다.클로져 파라미터 앞에 @noescape를 붙여주면 컴파일러는 이 클로져의 lifespan(생명주기같은?)에 대해 더 잘알기 때문에 좀 더 optimization을 해주게 됩니다. 예를 들어, sort(_:)메소드는 클로져를 파라미터로 받습니다.(배열의 element들을 정렬하는 데에 사용되죠) 이 때, 해당 클로져는 element정렬이 끝..
-
[Apple Dev Reference - Swift] Strong Reference Cycles for Closures앱등이에게 살충제를 뿌린다./Apple Dev Reference 2016. 5. 15. 23:13
서로 강한참조를 하면 절대 메모리에서 사라지지 않는다 Strong Reference Cycles for ClosuresStrong Reference Cycles for ClosuresARC & Strong Reference Cycle에서는 두 인스턴스가 서로 강하게 참조할 때 순환 참조(Strong Reference Cycle)가 발생하는 것을 살펴보았습니다. weak 참조와 unowned 참조를 사용하여 이를 해결하는 방법도 살펴보았습니다. 클로져에서도 비슷한 경우가 있습니다. 클로져의 바디에 인스턴스의 프로퍼티나 인스턴스를 캡쳐하면 순환 참조가 발생할 수 있습니다. self.someProperty처럼 클로져에서 해당 인스턴스의 프로퍼티에 접근할 때나 self.someMethod()와 같이 인스턴스의 ..
-
[Apple Dev Reference - Swift] ARC & Strong Reference Cycle앱등이에게 살충제를 뿌린다./Apple Dev Reference 2016. 5. 15. 02:01
Automatic Reference Counting Swift는 메모리관리를 위해 ARC(Automatic Reference Counting)를 사용하고 있습니다. 대부분 이 ARC덕분에 여러분은 메모리 관리를 신경쓸 필요가 없습니다. ARC는 필요없는 인스턴스를 자동으로 메모리에서 해제함으로써 메모리관리를 합니다. 하지만 가끔은 ARC가 여러분의 코드로 메모리 관리를 할 때, 추가적인 정보가 필요할 때가 있습니다. 어떤 경우인지, 또 그런 상황은 어떻게 해결해야할 지 이 챕터에서 다뤄보겠습니다. Note : 참조 카운트는 클래스의 인스턴스에만 적용됩니다. Structure와 Enumeration은 Value타입이기 때문에 참조 카운팅이 필요 없습니다. How ARC Works 새로운 인스턴스가 생성되면..
-
[Apple Dev Reference - Swift] Implicitly Unwrapped Optionals앱등이에게 살충제를 뿌린다./Apple Dev Reference 2016. 5. 15. 01:57
Implicitly Unwrapped Optionals아시겠지만 옵셔널이란 "no value"를 나타낼 수 있는 타입입니다. 옵셔널은 if문을 통해서 변수에 값이 있는지를 체크하고 옵셔널 바인딩을 통해 값을 해제하여 사용할 수 있습니다. 하지만 가끔은 데이터의 구조상 '항상' 값을 갖는 옵셔널이 있을 수 있습니다. 이런 경우에는 옵셔널을 언래핑할때 굳이 nil체크를 할 필요가 없겠죠. 항상 값을 갖고 있으니 언래핑이 안전하게 될 것입니다.이런 종류의 옵셔널을 implicitly unwrapped optional이라고 합니다. implicitly unwrapped optional을 선언할 때는 타입에 물음표(String?)가 아닌 느낌표(String!)를 붙여주어야 합니다.implicitly unwrapp..
-
[Apple Dev Reference - Swift] Trailing Closures 클로져를 파라미터로 간단히 사용하기앱등이에게 살충제를 뿌린다./Apple Dev Reference 2016. 4. 26. 23:39
Trailing Closures함수의 파라미터로 클로져를 넣을 때가 있습니다. 그 중 함수의 파라미터 중 마지막 파라미터가 클로져일 경우에는 trailing closure로 코드를 적는 것이 더 편합니다. trailing closure란 클로져를 함수를 호출하는 부분의 바깥에 클로져를 적어주는 건데요, 아래 예를 보면 이해가 빠르실 듯 합니다. func someFunctionThatTakesAClosure(closure: () -> Void) { // function body goes here } // here's how you call this function without using a trailing closure: someFunctionThatTakesAClosure({ // closure's b..
-
[Apple Dev Reference - Swift] Generics (of Swift2.2)앱등이에게 살충제를 뿌린다./Apple Dev Reference 2016. 4. 24. 15:18
Generics제네릭 코드를 사용하면 좀 더 유연하고 재사용률이 높은 함수를 만들 수 있습니다. 제네릭을 통해 코드 중복을 방지할 수 있고, 함수의 역할을 좀 더 명백히 전달할 수도 있습니다. 제네릭은 Swfit의 가장 큰 강점 중 하나입니다. 수 많은 Swift라이브러리들이 이 제네릭을 사용하고 있습니다. 못 알아채셨을 수도 있는데, Swift 언어를 익히시는 동안 계속 제네릭을 사용해왔습니다. 예를 들어, Swift의 Array와 Dictionary는 둘 다 제네릭 컬렉션입니다. Array를 만들 때, Int타입 Array나 String타입 Array를 만들기도 하고, 또 여러분이 직접 만든 클래스 타입으로도 수 많은 종류의 Array타입을 만들어 보셨을겁니다. Dictionary에서도 유사하게 무수..