목록iOS/etc (12)
이모저모
iOS에서는 image를 asset에 넣어서 사용한다. image asset에서는 normal, 2x, 3x 이렇게 나누어져 있다. 회사마다 이미지를 2x, 3x 다 넣는 곳도 있겠지만, 2x만 넣는 곳도 있을 것이다. 이때 궁금했던점이 Q) 3x 디바이스에서 2x 이미지를 어떻게 처리할 까? A) image asset에 있는 포인트 좌표를 따라간다. 1. 200 X 200 (픽셀) 이미지가 2d asset에 넣어졌다하면 2. 100 X 100, 2 scale의 이미지로 본다. (뷰 좌표계로 본다면) 3. 3x 디바이스에서 해당 이미지를 가져오면 100 X 100 자체의 포인트 좌표계를 먼저 보게된다. 그리고 scale링을 한다. 4. 그래서 3x, 2x 디바이스나 똑같은 크기의 이미지를 보게 된다.(3..
Label 에서 text 설정할 때 Label의 길이를 넘어갈 수 있다. 이 때 스토리 보드에서 (물론 코드도 있다.) 1. Line Break위 설정에서 앞, 중간, 뒤가 텍스트가 짤리는 것을 설정할 수 있다. 2. Autoshrink위 설정으로 최소 font 사이즈를 설정하여 현재 font에서 1씩 줄여가며 텍스트가 짤리는 여부를 확인한다. 짤리지 않으면 그 font사이로 설정한다. 최소 font도 짤리게 되면 짤린 상태로(최소 font size) 보여지게된다.
ios 에서c 파일과 .mm 파일을 혼용하여 사용할 때 undefine symbol error가 나는 경우가 발생한다. 분명 정의를 찾아가 보면 함수가 정의되어 있지만 링커는 찾지 못한다고 한다. 그 이유는 C++에서는 name mangling이 발생하기 때문이다. name mangling 이란?간단히 말하면 컴파일러가 임의로 함수나 변수의 이름을 변경하는 것이다. 이것은 C++의 함수 오버로딩 때문이다. C에서는 보통 symbol table 이 _function name 으로 되는데C++ 에서는 name mangling이 되기 때문에, C 함수를 C++함수로 인식하게 되면 mangling 된 함수로 찾기 때문에있어도 찾지 못하는 것이다. 그래서 해결방법 해당 C 헤더 파일을 extern "C"{ 헤더 ..
Objective-C block에서 캡쳐에 대한 고찰 예제 1[someObject messageWithBlock:^{[self someMessage];...}]; 예제 2__weak typeof(self) weakSelf = self;[someObject messageWithBlock:^{__strong typeof(weakSelf) strongSelf = weakSelf;[strongSelf someMessage];...}]; 다음과 같은 예제가 있다 무슨 차이가 있을까?1. 예제 2가 예제1에 비해 안전하다.(weak로 self가 dealloc 되더라도 nil이 셋팅되기 때문에)이것 밖에 없을까??? 아니다.2. self의 life cycle이 서로 다르다.block이 셋팅될 때 캡쳐된 변수를 ret..
iOS에서는 홈 버튼 + 전원 버튼을 동시에 누르면 화면 캡쳐를 할 수 있다.그렇다면 프로그래밍 적으로 화면 캡쳐를 할 수 있는 방법을 알아 보자. 이 방법은 iOS 7 이상이면 사용 가능하다. UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0); [self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES]; UIImage *sCaptureImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageWriteToSavedPhotosAlbum(sCaptureImag..
Objective-C NS_ENUM typedef NS_ENUM(NSInteger, UITableViewCellStyle){UITableViewCellStyleDefault,UITableViewCellStyleImage,UITableViewCellStyleText,...};NS_ENUM(arg1, arg2)는 arg1은 새 type을 저장하는데 사용되는 type을 지정하고 arg2는 해당하는 자료형의 새로운 유형의 이름이다. 블록 내에서의 값은 c와 같이 정의 된다.
1. auto_ptr유일 소유권 개념이 있어, 객체 복사되는 순간(복사생성, 대입연산) 원래의 auto_ptr = null 셋팅이 된다. 2. shared_ptrreference counting 방식을 사용하는 스마트 포인터, 참조 카운트가 0이 되면 자동으로 해제하는 방식이다. 복사나 대입이 발생하는 경우 참조 카운트가 1 증가한다. 3. weak_ptrshared_ptr 의 객체만 참조할 뿐, 참조 카운트를 증가시키지 않는다.사실 상 weak reference count는 증가 시키고, strong reference count는 증가 시키지 않는 것이다.shared_ptr의 참조자라는 표현이 적절하다.
ReplayKit스크린의 비디오 및 마이크로폰의 오디오를 녹음 할 수 있습니다. 그런 다음 메일, 메시지 등을 이용해 공유할 수 있습니다.ios10 이상부터는 (스트리밍 서비스)실시간으로 브로드 캐스팅을 하기 위한 추가 앱을 만들 수 있다.초점은 게임 생방송에 맞춰져 있는 것 같다.AVPlayer 콘텐츠와 호환되지 않습니다. 통화 중이나, 영상 통화 같은 경우에는 screen을 저장하는 것은 가능하다.통화 시작후 microphone: true 설정 후 하면 어떻게 동작할지 예상할 수 없게 된다.
구현 구조 typedef struct objc_object{ Class isa; } *id; typedef struct objc_selector *SEL; typedef id (*IMP)(id self,SEL _cmd,...); struct objc_class { Class isa; Class super_class const char *name long version long info long instance_size struct objc_ivar_list *ivars struct objc_method_list **methodLists struct objc_cache *cache struct objc_protocol_list *protocols }; typedef struct objc_class *Cla..
Objective-C의 메시징 id objc_msgSend(id self, SEL cmd, ...);typedef id (*IMP)(id self, SEL cmd, ...); 과정1. objc_msgSend 함수는 리시버의 클래스가 구현한 메서드 목록을 훝는다.2. 찾지 못하면 상속 계층에 따라 메서드를 찾아 거꾸로 올라가 간다.(child->parent)3. 일치하는 메서드를 찾지 못하면 mesage forwarding이 동작한다. 특징- 매우 느릴것 같아 보이지만 각 클래스마다 하나씩 있는 빠른 맵에 결과를 캐싱한다. (그래서 한번 호출된 클래스의 선택자에 대한 메시징은 빠르게 수행)- method들은 클래스마다 있는 내부 테이블에 SEL을 키로 하여 보관하여 objc_msgSend에서 함수 구현을 ..