아래는 스크롤뷰의 컨텐츠를 프로그램에서 추가 삭제 할때 레이아웃이 망가지지 않게 하는 방법에 대해서 알아본다.모든 화면구성 할때 가장 기본이 되는 뷰가 아닌가 싶다.각 뷰에 어떤 Constrain을 추가하는지 순서대로 따라한다.먼저 View의 구조에 대해서 보면 1. Main view 2. Scroll view 3. Content view 4. Stack view1. Main view 최상의 뷰에는 벼로 설정 할 것이 없음으로 그냥 건너뛴다. 다만 취 상위뷰에 Scroll view 하나를 추가한다.2. Scroll view Scroll view 는 상,하,좌,우 constrain을 슈퍼뷰와 연관을 가지도록 추가 한다..3. Content view Content view 의 상,하,좌,우 constrain..
IOS 에서 스레드를 사용 하기 위해서 병렬 혹은 직렬 큐를 생성하여 사용 할 수 있다.디스패치-그룹을 사용 하는 방법 1. 병렬큐 생성 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 2. 직렬큐 생성 dispatch_queue_t dispatch_queue_create(const char *label, dispatch_queue_attr_t attr); macOS 10.7 이후버전과 IOS 4.3에서는 attr를 반드시 명시적으로 DISPATCH_QUEUE_SERIAL혹은 (NULL)로 명시 하여야 한다. 만약 비동기 큐를 만들려면 DISPATCH_QUEUE_CONCURRENT으로 입력 해야 ..
1. UIView(xib)파일 만들기먼저 xib 파일을 하나 만든다. Attributes inspector 에서 Simulated Metrics - Size 를 Inferred 에서 Freeform 으로 바꾼다. 그리고 Size inspetor 에서 Width와 Height를 A4용지의 크기에 맞게 조절을 한다. UIView를 상속받는 클래스를 생성하고 위에서 만든 xib파일의 File's Owner과 연결한다. 2. UIView를 PDF 로 저장위에서 만든 UIView오브젝트를 로드하기 위해서는 아래와 같이 먼저 uiView오브젝트를 생성하여야 된다. UIView *rootView = [[[NSBundle mainBundle] loadNibNamed:@"SampleUIView" owner:self op..
Getter & Setter 를 사용하여 멤버변수 생성하기@interface Employee : NSObject { int employeeNumber; NSString *name; } - (void) setName : (NSString *) newName; - (NSString *) name; @endAccessor 를 사용하여 멤버변수 생성하기@interface Employee : NSObject { int employeeNumber; NSString *name; } @property (nonatomic, assign) int employeeNumber; @property (nonatomic, retain) NSString *name; @end @implementation Employee @synthe..
클래스 오브젝트 초기화오브젝트를 생성하기 위해서 메모리할당(alloc) 과 초기화(init)라는 두 단계를 거쳐야 한다.메모리할당: 오브젝트가 사용할 메모리를 힙에서 할당 받는다.초기화: 오브젝트에 필요한 초기 값을 채워준 다음 그 메모리 주소에 대한 포인터를 반환한다. Foo* myFoo = [[Foo alloc] init]; 메모리 할당(Alloc):NSObject 클레스에서 상속받은 클래스메소드 alloc으로 한다. 아래는 동작 방식:1. alloc은 새로운 오브젝트를 위한 메모리를 할당하고 그 주소를 가리키는 포인터를 반환.2. 컴파일러는 모든 오브젝트 인스턴스에 대해 isa라는 이름의 인스턴스 변수를 자동생성하고 alloc은 이 변수의 내용을 채운다. isa는 오브젝트의 클래스 구조에 대한 포인..
@property : accessor 메소드를 선언하는 간편한 방법 제공@synthesize : 컴파일러가 지정된 accessor 메소드를 자동으로 작성하게 만든다. 프로퍼티 이름과 그 프로퍼티를 나타내는 인스턴스 변수 이름을 달리하기. @synthesize propertyName = instance variableName;@dynamic : accessor를 직접 작성할 것임을 컴파일러에 알리기 위하여 사용, 즉 getter 와 setter가 구현되어 있지 않아도 상위 클래스 어딘가에서 선언되어 있다고 미리 알려주기 때문에 컴파일 할 때 오류가 발생하지 않는다. 주로 setter 에 입력값을 제한하는 로직이 들어있을때, 이것을 사용한다.프로퍼티속성에는 3가지가 있다.1. getter 와 setter의 ..