본문 바로가기

Dev.iOS/Objective-C

(6)
[Objective-C] 6. 블록(block)에 대해서 Chapter 6. 블록(Block)에 대해서애플이 추가한 것으로 표준 ANSI C 정의에는 포함되지 않았다. 블록은 함수와 비슷하게 생겼고 동작도 유사하다. 함수에서처럼 인수를 넘길 수 있고, 블록에서 결과 값을 받는 것도 가능하다. 블록은 함수와 달리 정의한 함수나 메서드 안에서 정의할 수 있고, 자신과 동일한 범위에 있다면, 블록 바깥에서 정의된 변수에도 접근이 가능하다. ( 단, 값의 변경은 불가능 하다. ) 특별한 경우로 __block 변수를 통해서 변수의 값을 수정할 수 있긴 하다. 하지만 일부 변수는 __block으로 선언될 수 없는데, 가변 길이의 배열, 가변 길이의 배열을 포함하는 구조체가 해당된다. 블록은 함수와 메서드에 인수로 넘겨질 수도 있다. 블록의 장점 중 하나는 시스템이 블록을..
[Objective-C] 5. 메모리 관리와 ARC에 대해서 Chapter 5. 메모리 관리와 ARC Objective-C에서 개발자가 사용 가능한 메모리 관리 모델은 세 가지가 존재한다. 1. 자동 가비지 컬렉션 2. 수동 레퍼런스 카운팅 및 오토릴리즈 풀 3. 자동 레퍼런스 카운팅(ARC) 1. 자동 가비지 컬렉션 가비지 컬렉션을 사용하면, 시스템이 자동으로 어떤 객체가 어떤 객체를 소유하는지에 대한 정보를 지속적으로 파악하고, 프로그램이 실행되는 동안 메모리 공간이 필요하면 더는 참조되지 않는 객체들을 자동으로 메모리에서 해제한다. 하지만 iOS 런타임 환경에서는 가비지 컬렉션이 지원되지 않는다. Mac OS 프로그램을 개발할 때만 가비지 컬렉션을 사용할 수 있다. 2. 수동 레퍼런스 카운팅 및 오토릴리즈 풀 수동 레퍼런스 카운팅은 기존의 코드를 ARC로 이..
[Objective-C] 4. Objective-C 동작하는 방식에 대해서 Chapter 4. Objective - C가 동작하는 방식Objective-C의 대표적인 특징은 동적인 언어(dynamic language)라는 것이다. 정적인 언어(static language)들의 경우 컴파일/링크 시점에서 이미 어떤 코드가 어떻게 실행될지 모든것이 결정된다. 하지만 런타임을 지닌 동적인 언어의 경우 이러한 결정을 실제 그 코드가 실행되는 순간까지 미룰 수가 있는 특징을 지닌다. 이러한 특징을 덕분에 실제 코드가 실행중인 런타임 상황에서 Objective-C 런타임에의해 원하는 객체로 메시지를 리다이렉트 한다던지, 메서드 자체를 바꿔치기 한다던지 등의 유연한 동작이 가능해진다. 이 대표적인 특징 때문에 자바스크립트와 유사한 느낌을 많이 받게 된다. 1. 인스턴스 변수는 구조체에 저장..
[Objective-C] 3. 카테고리와 프로토콜 Chapter 3. 카테고리와 프로토콜카테고리를 사용하여 모듈 방식으로 클래스에 메서드를 추가하자. 프로토콜을 사용하여 다른 사람들이 구현할 메서드의 표준화된 목록을 만들자. 카테고리란 무엇인가( What ) 카테고리는 클래스 정의를 그룹짓거나 연관된 메서드를 묶어 쉽게 모듈화할 수 있게 해준다. 또 원본 소스코드에 접근하거나 서브 클래스를 생성하지 않고도 현존하는 클래스의 정의를 쉽게 확장할 수 있다. 어떻게 사용하는가 ( How ) @interface Fraction (MathOps) MathOps라는 카테고리를 만들었다. 인터페이스 지시어를 써주고 클래스 명 다음에 카테고리명을 적어주는 방식이다. 이를 구현할 때도 마찬가지로, @implementation Fraction (MathOps) 라고 해준..
[Objective-C] 2. 클래스에 대해서, 프로퍼티 Chapter 2. 클래스에 대해서, 프로퍼티 Objective-C 소스 파일(구현부)은 .m을 확장자로 한다. 헤더파일은 (.h)의 확장자를 갖는다. 헤더파일과 구현 파일 두 개가 합쳐서 클래스를 구성한다. Objective-C 컴파일러는 두 개의 파일을 개별적으로 컴파일한다. #import vs #include ifdef를 기억하는가? #include는 중복되어 include되는 헤더 파일을 파악하지 못해 ifdef를 통해 이를 해결해야 했지만, #import 지시어는 여러 번 같은 클래스를 import ( include ) 하여도 중복되는 것은 무시한다. 헤더 파일의 #import 와 구현 파일의 #import “header.h”에서‘꺾쇠'와 'double quote, 큰 따옴표'의 차이는 무엇인가..
[Objective-C] 1. Prefix와 메소드 선언, 호출 Chapter 1. Prefix 와 메소드 선언, 호출 Primitive type을 제외한 Type과 상수id : 타입과 관계없이 객체(Object)를 가리킴 void의 포인터로 어떤 자료형이든 다 받아주는 자료형이다. event 발생 시 호출될 메소드들은 return value를 IBAction으로 해서 glue coding을 할 수 있도록 메소드의 시그니처를 선언해줘야 한다.BOOL : char 와 형식은 같지만 불리언 값으로 사용된다.nil : NIl : NULL+ IBOutlet : 클래스 선언을 읽을 때 인터페이스 빌더에 인식시키는 키워드+ IBAction : void 타입. 인터페이스 빌더에 인식시키기 위한 키워드 NS의 정체 Objective - C 언어는 NeXTSTEP을 뿌릴로 두고 있기..