SWIFT 25

swift - method dispatch : 메소드 디스패치

일단 스위프트에는 static dispatch와 dynamic dispatch가 있다. static dispatch 위 처럼 drawAPoint 메소드가 Point안의 struct의 draw 메소드인 경우, 호출 타이밍이 너무 명확한 경우 컴파일러는 static하게 디스패치 해버린다. 이 경우 drawPoint 호출시 이중으로 스택에 불필요하게 세팅되었을 오버헤드가 사라진다. dynamic dispatch 스위프트에서 다이나믹 메소드 디스패치가 사용되는 경우는 위처럼 다형성이 사용되는 경우일 수 있다. (다형성 객체의 메소드라고 무조건 다이나믹 디스패치는 아님; 호출 시점이 명확하면 컴파일러가 알아서 스태틱 디스패치로 하기도한다 함) 어쨌든, 위 경우를 보면 drawables가 다형성에 의한 배열이라 d..

Advanced Swift 2022.12.20

swift struct내에 class property가 있으면 안좋다 - reference counting과 스위프트 성능의 관계

struct를 사용하다 보면 내부에 property는 어떻게 메모리 상에서 존재하는지 궁금했습니다. text, font 모두 referenceType으로 힙에 저장됩니다. 이런 경우 오른쪽 이미지 처럼, 스택에 레퍼런스하는 지점만 있고 모두 힙에 존재하는 데이터를 포인팅하게 되는데요. Label은 즉 두번의 레퍼런스 카운팅을 하게되어 비효율적이라 합니다. reference counting은 자주 일어나지 않는게 좋습니다. 즉 아무리 struct라도 reference를 소유하는 경우는 꽤나 비효율적으로 동작한다는 얘기입니다. struct는 1개 이상의(2개 이상인거 같은데...) reference를 갖는 경우, 레퍼런스 카운팅이 소유하는 레퍼런스 갯수만큼 발생하므로, class에 비해 비효율적이라 할 수 ..

카테고리 없음 2022.12.20

swift string은 Stack, Heap 둘중 어디에 저장될까?

정답은 heap이다... 그런데 string은 value 타입임. 즉 swift에서 저장 공간과 value, reference 타입은 관계가 없다. 즉 value 타입이라고 항상 스택에 저장되는게 아니다. 하지만 string은 짧은 문자열은 스택에 저장되기도 한다 함(16바이트 이하)...? string이 heap에 저장되는 이유에 대해 알아보자. array, dictionay, set, string(collection of char)과 같이 가변 길이의 Collection들은 내부 데이터를 힙에 저장한다. 컴파일 타임에 그 사이즈를 정확히 알기 어려워 heap에 할당 후 사이즈를 조절한다. 주로 스택에 저장되는 경우는 변수의 생명주기가 static한 경우고, value type의 사이즈가 컴파일 타임에..

Advanced Swift 2022.12.19

[iOS Swift AVFoundation] 1편. AVFoundation 개요 - AVKit

드디어 iOS에서 미디어 파일을 다루어볼 기회가 생겼다. 그러기 위해서는 기본적으로 AVFoundation을 알아야 한다. 내가 하고자한건 일단, 녹음 기능과 재생 기능을 구현하였다. [iOS Swift AVFoundation] 1편. 미디어 파일을 다루려면? - AVKit [iOS Swift AVFoundation] 2편. 음성파일 재생 하기 - AVPlayer, PlayBack 하지만 하다보니 AVFoundation이라는 녀석이 궁금해짐. import AVFoundation https://developer.apple.com/documentation/avfoundation Apple Developer Documentation developer.apple.com 1. AVFoundation 개요 AVFo..

기타/iOS 기초 2022.07.15

swift delegate - 스위프트 delegate 사용 방법 이해하기

delegate에 대한 글은 많아서 일단 제가 햇갈렸던 부분을 설명해 보겠습니다. 자꾸 위임자라 그래서 잘 와닿지 않았는데 일단 delegate는 특정 delegate 프로토콜을 만족하는 프로퍼티라 볼 수 있습니다. 그래서 주로 delegate를 사용하는 단계는 1. 구현하려는 delegate의 기능을 명세 해주는 protocol을 구현합니다. 2. protocol을 상속받는 class를 정해서 (이 클래스를 A라 합시다), protocol이 명세한 사항을 해당 class A에서 구현해 줍니다. 3. 이제 A를 이용할 B를 찾습니다. 무슨 말이냐면 A는 B의 특정 기능들을 대신해서 수행해줄 대리자 입니다. 4. A의 도움이 필요한 B 클래스에 위에서 만들고 구현해준 delegate 타입으로 프로퍼티를 생..

카테고리 없음 2021.06.07

swift에서 @objc란?

원래 swift는 오직 swift 코드에만 접근이 가능하도록 한다. 그런데 종종 우리는 objective-c 코드를 swift 파일내에서 사용해야 할 때가 있다. [www.hackingwithswift.com/example-code/language/what-is-the-objc-attribute]에 의하면 정확히는 런타임때 스위프트가 objc와 상호작용해야 할때라 한다. 우리가 아래 처럼 @objc를 붙이면 붙여진 swift 코드를 objective-c에서도 사용할 수 있다는 의미이다. class MyController: UIViewController { @objc func authenticateUser() { } }

ios개발 2021.05.01

<iOS개발> swift에서 sender란?

sender는 해당 메소드를 호출하는 caller를 말한다. 위의 버튼 클릭시 버튼 자체를 말한다. 처음에는 버튼에서 많이 보는데, 아래에서 sender가 보인다. @IBAction func mainButton(sender: UIButton) { println(sender.tag) } 다른 말로는 The object responsible for the action handler. [developer.apple.com/documentation/uikit/uiaction/3600315-sender] 액션 핸들러에 대한 책임이 있는 객체다.

ios개발 2021.05.01

<swiftUI> 자간 - character spacing

swiftUI character Spacing으로 검색하면 kerning과 tracking이 나온다. kerning을 사용하면 자간을 조절할 수 있다. kerning은 합자 (ligature) -> 합쳐진 글자 여기서는 ff 합자에 대해서 아래와 같이 처리한다. 자간이 늘어나면 합자 간격도 늘어남, 줄어들면 합자 간격은 유지. tracking은 kerning이랑 비슷한데. The effect of tracking resembles that of the kerning(_:) modifier, but adds or removes trailing whitespace, rather than changing character offsets. Also, using any nonzero amount of tracki..

ios개발 2021.02.13

swift watchConnectivity 연결해서 데이터 주고 받기 위한 세팅 방법

워치앱 아이폰앱 연동 방법은 [developer.apple.com/documentation/watchconnectivity] 이걸로 해야한다. 이게 예제 프로젝트긴 한데 정리해서 설명하면.[developer.apple.com/documentation/watchconnectivity/using_watch_connectivity_to_communicate_between_your_apple_watch_app_and_iphone_app] 첫째, ios, watch 각각에 WCSession을 설정해야 한다. 둘째, 공통으로 sessionDelegater를 구현하고, 각자 안에서 watchOS와 iOS코드를 분기해 줘야 한다. 셋째, sessionCommands를 구현하고, 사용하고자 하는 클래스에 상속시켜서 사용..