본문 바로가기

아이폰 개발/ios 개념&튜토리얼86

디스패치 큐 사용시 주의 사항 디스패치큐 사용시 주의사항 반드시 메인큐에서 처리해야 하는 작업 2.Sync 메서드에 대한 주의 사항 3.Weak, strong 캡쳐주의 컴플리션 핸들러의 존재이유 동기적 함수를 비동기 함수로 만드는 방법 중요한 개념 : ui 관련작업은 메인큐에서 처리해야 한다 비동기로 작업을 보내다가 ui작업은 메인 뷰로 보내서 처리해야 한다 코드 예시 urlsession 도 내부적으로 비동기 처리 로직으로 작동한다. 비동기 작업 완료 후 ui 처리 작업은 메인 스레드로 보내서 처리하는 예 실제앱에서는 ui 작업이 메인큐에서 작동하고 플레이 그라운드에서는 global 큐에서 작동 한다. 2)sync 메서드에 대한 주의 사항 sync 메소드와 관련해 절대 해서는 안되는 코드 2가지 코드예시 이유는 2)현재의 큐에서 현재.. 2021. 7. 3.
swift 디스패치큐의 종류 특성 1.메인큐 2.글로벌 큐와 qos 3.프라이빗 큐 -큐의 종류 다양한 큐가 존재한다 대기열(큐) 마다 특성이 달라서 특성에 맞게 작업을 할당해주면 된다. 큐의 종류별로 스레드가 존재해서 알아서 큐가 작업을 스레드로 보내준다 -메인큐에 대하여 코드 예시 - 글로벌큐 글로벌 큐는 병렬로(동시)처리된다 글로벌 큐의 서비스 품질 특성 백그라운드 큐를 생성 후 닷 유틸리티큐를 생성해서 작업을 할당했다면 성능은 유틸리티 성능이된다. 코드 예시 - 프라이빗 큐 프라이빗큐 디폴트 성질은 직렬처리다.( 옵션으로 동시성 처리도 가능) 코드예시 코드로 구현 정리 2021. 7. 1.
swift 직렬과 동시 & 동기와 비동기 개념 큐의 종류 큐의 종류에는 직렬큐와 동시성 큐가 있다. -직렬큐 -동시성큐 몇 개의 스레드로 분산해서 처리할지는 시스템이 결정한다. 다만 큐에만 넣어주면 여러개의 스레드로 처리해준다. 한문장으로 정리 언제쓰나? 동시큐 사용 예) 동기와 비동기 의미 2021. 7. 1.
ios dispatchequeue 1 위 화면에서 스크롤 할때 화면이 왜 버벅일까? 아이폰 화면은 16밀리 세컨에 한번씩 갱신된다. 하나의 셀을 구성하기 위해서 여러 작업들이 일어나는데 그 작업들의 처리량이 많기 때문이다. 즉 일이 많다. xcode에서 보면 스레드 하나만 작동되는것을 볼수 있다. 하나의 셀에서 많은 양을 처리하는 과정이다 실생활예시로 여러개의 복사기가 있는데 하나의 복사기만 사용하는것과 같다. 그럼 어떻게 많은 양의 작업을 동시에 처리해서 안 버벅이게 할수 있을까? 대기열에 작업을 넣어주기만 하면 된다. 즉 큐에 디스치 해주면된다. 그럼 시스템이 알아서 큐에서 작업을 빼서 스레드에 할당해준다. 우리가 할일은 작업을 큐로 보내는것! GCD 와 OPERATION 어떻게 코드로 구현 할까? 코드 구현 2 한 작업 단위란 클로저 .. 2021. 6. 30.
iOS NSStream 이용한 채팅앱 예제 iOS NSStream 이용한 채팅앱 예제 ✅ iOS 네이티브 소스 SocketSessionViewController.h #import @interface SocketSessionViewController : UIViewController @end SocketSessionViewController.m #import "SocketSessionViewController.h" @interface SocketSessionViewController () //텍스트 필드 @property (weak, nonatomic) IBOutlet UITextField *idTextField; @property (weak, nonatomic) IBOutlet UIView *sessionView; @property (strong.. 2021. 3. 17.
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.