본문 바로가기

전체 글380

swift 기초 - 옵셔널, 구조체, 클래스, 열거형, 값타입 참조타입 [1]옵셔널 [1] 옵셔널 : nil이 들어올 수 있다. 옵셔널이 아닌 타입에는 nil을 할당할 수 없다. [1-1] ! 암시적 추출 옵셔널 nil 할당가능 , 기존변수처럼 사용가능 잘못된 접근으로 인한 런타임 오류 발생 가능 var optionValue1 :Int! = nil; switch optionValue1 { case .none: print("nil!"); //print(optionValue1 + 1) case .some: print("not nil..."); print(optionValue1 + 1) } [1-2] ? : 일반 옵셔널 기존 변수처럼 사용불가능 옵셔널과 일반값은 다른 타입이므로 연산불가. 파라미터가 옵셔널 타입이므로 nil이 들어갈 수 있다. func some(someOption.. 2021. 3. 3.
메모리 관리 메모리 관리 객체의 일생 살아있는 벌이나 새와 마찬가지로 프로그램의 객체에도 일생이 있다. 객체는 alloc 이나 new로 태어나고, 메시지를 받고 일을 하면서 살아가면서 컴포지션이나 메소드의 인수들을 통해 친구를 만들고, 일생이 끝날 때 해제되어 결국 죽는다. 객체의 일생이 끝나면 그 객체가 사용하던 메모리는 말끔하게 재활용되어 다음에 태어날 객체를 위해서 사용된다. 참조횟수 객체가 끝날때를 어떻게 알 수 있을까? 참조횟수라는 방법을 사용한다. 모든 객체는 그 객체의 참조횟수라고 하는 정수 값을 가지고 있다. 어떤 코드에서 그 객체를 사용하고 있다면, 그 코드는 객체의 참조횟수를 증가시켜서 "이 객체가 사용되고 있다" 라고 알려준다. 그 코드가 객체 사용을 다 끝내면 참조횟수를 줄여서 객체가 더 이상 .. 2021. 2. 22.
컴포지션 컴포지션이란 무엇인가? 컴포지션은 각기 다른것으로 큰 하나를 만들 수 있는 것을 말한다. 소프트웨어로 외발 자전거를 만든다고 할 때, 페달 객체와 타이어 객체를 조립해 구성하는 것도 컴포지션이라 할 수 있다. 오브젝티브 c 에서는 객체를 가리키는 인스턴스 변수로 컴포지션을 만들 수 있다. 참고 앞의 포스팅 Shape Object 프로그램에서 이미 컴포지션을 사용했다. Shape 클래스는 사각형과 색깔로 된 요소를 사용하고 있다. 그러나 엄밀히 따지면 객체를 사용하는 것만 컴포지션에 해당한다. int, float, enum, struct 와 같은 기본타임은 그냥 객체의 한부분이라고 생각하면 된다. NSLog 수정 NSLog()는 객체를 출력하기 위해 %@ 형식 지정자를 사용한다. %@지정자를 처리할 때 객.. 2021. 2. 22.
iOS UIBezierPath 예제 - 그림 그리기 iOS UIBezierPath 예제 - 그림 그리기 선분 그리기 MyView.h #import NS_ASSUME_NONNULL_BEGIN @interface MyView : UIView @end NS_ASSUME_NONNULL_END MyView.m #import "MyView.h" @implementation MyView - (void)drawRect:(CGRect)rect { // Drawing code NSLog(@"drawRect 호출됨."); //1.UIBezierPath 객체 생성 UIBezierPath *path = [[UIBezierPath alloc]init]; //2.UIBezierPath 객체관련 속성 설정 path.lineWidth = 4; path.lineJoinStyle = kC.. 2021. 2. 22.
CGContextRef 예제 - 그림 그리기 CGContextRef 예제 - 그림 그리기 참고로 CGContextRef 는 UIView를 상속받은 클래스에서 사용할 수 있다. #import #import NS_ASSUME_NONNULL_BEGIN @interface MyView : UIView @end NS_ASSUME_NONNULL_END #import "MyView.h" @implementation MyView - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { NSLog(@"initWithFrame 호출"); } return self; } - (instancetype)initWithCoder:(NSCoder *)coder { s.. 2021. 2. 22.
iOS 카테고리 예제 - (UIColor 확장하기) iOS 카테고리 예제 - (UIColor 확장하기) 상속 : 상속은 슈퍼 클래스의 변수와 메소드(기능)을 서브클래스가 다 가지면서도, 슈퍼클래스에 없는 기능을 서브클래스가 추가할 수 있다. 즉, 위에서 아래로 확장이라고 할 수 있다. 카테고리 : 이미 있는 클래스에 기능을 더 추가한다. 상속보다 사용하기가 편하다. 필요한 기능만 카테고리를 이용해서 만들면 된다. UIColor 확장 예제 UIColor에 THAdditions 라는 카테고리를 만들 것이다. @interface UIColor (카테고리 이름) UIColor+THAdditions.h //UIColor 의 카테고리 추가 @interface UIColor (THAdditions) //다크 칼러 - (UIColor *)darkerColor; //라이.. 2021. 2. 21.
iOS AVPlayer 영상 재생 예제 iOS AVPlayer 영상 재생 예제 CustomPlayerController.h 스토리보드에서 만든 버튼 및 뷰, 슬라이더를 컨트롤러와 이어주고 필요한 메소드 선언. #import #import NS_ASSUME_NONNULL_BEGIN @interface CustomPlayerController : UIViewController @property (strong, nonatomic) IBOutlet UIButton *doneButton; //닫기 @property (strong, nonatomic) IBOutlet UIView *controlView; //컨트롤러 뷰 @property (strong, nonatomic) IBOutlet UIButton *playBackButton; //재생 버튼 @p.. 2021. 2. 18.
iOS CLLocation 위도경도, 속도, 이동거리 구하기 iOS CLLocation 위도경도, 속도, 이동거리 구하기 #.아래 포스팅 이어서 작성 iOS CoreLocation 공통 모듈 - 싱글톤 [STEP 1] 이전위치, 새 위치, 거리 , 속도를 위한 변수 추가 @property (nonatomic , strong) CLLocation *oldLocation; @property (nonatomic , strong) CLLocation *mynewLocation; @property (nonatomic , strong) NSString *distance; @property (nonatomic, strong) NSMutableArray *cLLocationArray; @property double speed; [STEP 2] 위치값 저장을 위한 배열 초기화 _.. 2021. 2. 18.
iOS 애플 중간 인증서 애플 중간 인증서 Apple Worldwide Developer Relations Intermediate Certificate 어쩌다가 한번씩 xcode 에서 앱 빌드하다가 xcode cannot launch bundleid... 이런식으로 팝업창이 뜬는경우가 있다. 빌드는 정상적으로 실행되고, 설치되 되는데 앱 실행시 앱이 죽어버린다. 문제는 애플 중간인증서다. 이 인증서가 없으면 애플 개발자 사이트에서 생성한 인증서를 키체인에서 열어보면 "신뢰되지 않은 인증서"라고 떠있을 것이다. 그것도 빨간글씨로... 인증서를 더블클릭한 후에 모두 신뢰하기 를 선택해도 마찬가지다. 원인은 애플에서 발행하는 애플 중간인증서가 삭제되었거나 만료되었거나 등등 문제가 생겼기 때문이다. xcode 14 이상 버전에서는 자동.. 2021. 2. 18.