아래 설명과 같이 AVPlayer는 상태가 계속해서 변경되는 동적 객체입니다. 플레이어의 상태을 관찰할 수 방법이 두 가지 방법이 존재합니다. (AVPlayer 애플 공식문서 링크에서 확인 가능합니다. developer.apple.com/documentation/avfoundation/avplayer) 그중에서도 일반 상태 관찰을 위해 옵저버를 통해서 상태 변화를 받아보도록 했습니다. 상태 변화를 받기 위해서는 observeValue(forKeyPath:of:change:context:) 메서드를 구현해야 합니다. override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any..
Objective-C에서 문자열은 NSString클래스의 인스턴스이다. 문자열을 생성하는 방법은 클래스 메서드를 사용해 자동을 소멸하는 인스턴스를 생성하거나, alloc 메서드를 사용해 인스턴스를 생성한 후 이니셜 라이져로 초기화하는 방법이 있다. 그중에서도 포맷을 지정해서 문자열을 생성하는 방법이다. stringWithFormat 메서드 활용하고, 인스턴스를 만들고 싶을 때는 alloc메서드를 생성한 뒤 initWithFormat: 메서드를 사용하면 된다. int main(int argc, const char * argv[]) { @autoreleasepool { NSString *str; int i = 10; str = [NSString stringWithFormat:@"int를 출력해보자 %d 이렇..
프로퍼티는 컴파일러가 자동 생성하는 접근자 메서드를 제어할 때 사용 원자성 자동 생성된 접근자 메서드는 기본적으로 메서드가 원자적으로 동작하게 만드는 데 락을 포함한다. 속성을 nonatomic으로 하면 락이 사용되지 않는다. Atomic 속성이 없더라도 명시적으로 원헀을 경우를 대비해 컴파일 에러 없이 원자성이 적용된다. 스스로 접근자 메서드를 정의하는 경우는 메서드가 원자적으로 동작하도록 구현해야 한다. 읽기/쓰기 read/wrtie 게터 세터 모두 사용한다. 프로퍼티가 자동 생성될 경우 컴파일러는 두 메서드 모두 생성한다. readonly 게터만 사용한다. 그리고 컴파일러는 프로퍼티가 자동 생성될 때에만 게터를 생성한다. 프로퍼티를 외부에 일기 전용으로 공개하고 싶을 때 사용할 수 있으나 클래스 확..
현재 진행하는 프로젝트에서 API 리퀘스트를 날려 받아온 데이터를 디코딩하고 넣어줍니다. 프로퍼티가 새로운 데이터가 들어옴을 감지하면 tableView를 리로드 시켜줍니다. 사실 스위프트에서는 그냥 프로퍼티 옵져버를 사용하는데요. 오브젝티브씨에서는 KVO key value observing이라는 친구가 있습니다. KVO는 오브젝트 값의 변화를 통지, 감시하기 위한 구조입니다. 특정 인스턴스의 특정 프로퍼티가 변화했을 때를 파악해 그에 맞는 처리를 할 수 있습니다. 위에서 오브젝트 값의 변화를 통지, 감시한다라고 했죠. KVO를 사용하려면 먼저 NSObject를 상속받아야 합니다. 즉 클래스여야 합니다. KVO를 그림으로 나타내자면 아래와 같은 흐름입니다. 이제 실제로 사용해봅시다. KVO로그를 찍기 위해..
옵젝씨에서 id타입은 클래스 인스턴스에 대한 포인터입니다. 옵젝씨의 클래스의 인스턴스는 모두 id 타입입니다. 일반적으로 메서드나 클래스에서 파라미터나 리턴 값으로 많이 사용하곤 합니다. 하지만 id 타입 메서드를 호출하는 것엔 주의해야 하는 점이 있는데요. 예를 들어 MyClass를 정의해줍니다. 그리고 YourClass를 정의합니다. 그리고 안에 saySomething이라는 메서드를 정의해주고 구현해줍니다. 메인 함수에서 myClass인스턴스 my1 그리고 my2를 생성했습니다. 둘 다 myClass인스턴스입니다. 이제 my1의 saySomething을 불러보도록 하겠습니다. 뭔가 이상하죠. 네 saySomething은 MyClass에 정의된 메서드가 아니라, YourClass에 정의된 메서드입니다...
조건문과 반복문은 프로그램 코드에 빠질 수 없는 구문입니다. 요즘 오브젝티브씨를 학습하고 있는데 스위프트랑 또 어떻게 다른지 알아보겠습니다. 먼저 if구문입니다. NSInteger a = 0; if (a == 0) { NSLog(@"a는 0이 맞습니다"); } else { NSLog(@"a는 0이 아닙니다"); } NSInteger a에 0을 넣어줬습니다. NSInteger은 플랫폼에 따라 32비트 64비트에 따라 int, long이 자동으로 결정됩니다. 그리고 a가 0인지 아닌지 판단해주도록 했습니다. a가 0이니 a는 0이 맞습니다가 출력됩니다. 이렇게 조건문을 작성해 참, 거짓을 구분할 수 있습니다. 또 다른 방법으로는 switch구문이 있습니다. NSInteger b = 0; switch (b) ..
Format Specifiers The format specifiers supprted by the NSString formatting methods and CFString formatting functions follow the IEEE printf speicification. %@ 오브젝티브씨 오브젝트a %d, %D 부호 있는 32비트 정수 %u, %U 양수의 32비트 정수 %x 양수의 32비트 정수, 숫자0-9와 소문자a-f를 사용한 16진수 출력 %X 양수의 32비트 정수, 숫자0-9와 대문자A-F를 사용한 16진수 출력 %o, %O 양수의 32비트 정수, 8진수 출력 %f 64비트 부동 소수점(double) %e 64비트 부동 소수점(double), e를 이용한 지수 출력 %E 64비트 부동 소..
메소드는 클래스의 행위를 정의합니다. 어떤 특정 작업을 수행하기 위한 명령문의 집합이라고도 말할 수 있습니다. 오브젝티브씨에서는 두 가지 종류로 메소드가 구성되어 있습니다. 네. 클래스 메소드 그리고 인스턴스 메소드가 있습니다. 클래스 메소드는 + 기호를 사용하여 표시합니다. 인스턴스 메소드는 - 기호를 사용하여 표시합니다. 클래스 메소드는 따로 객체화 할 필요가 없지만 인스턴스 메소드는 객체를 만들어 줘야 합니다. 이것이 두 메소드의 차이점입니다. 그럼 메소드의 구문을 살펴보겠습니다. 먼저 인스턴스 메소드냐 클래스 메소드냐 구분을 해줘야 합니다. 두 번째로 리턴 타입이 없는 경우 생략 가능하지만 있다면 괄호에 리턴 타입을 명시해줘야 합니다. 다음으로는 메소드 이름을 작성해줍니다. 콜론 뒤 괄호와 함께 ..
- Total
- Today
- Yesterday
- 딥러닝
- 머신러닝
- RX
- rxswift
- string
- 책 추천
- 책
- 문자열
- 스위프트UI
- 스위프트
- objective-c
- swiftUI
- iOS SwiftUI
- ReactiveX
- SWIFT
- Xcode
- ios
- ARC
- leetcode
- wwdc
- swift5
- Animation
- 독서
- objc
- 애니메이션
- stanford SwiftUI
- 책 후기
- Algorithm
- Deep learning
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |