본문 바로가기

Dev.iOS

(12)
[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을 뿌릴로 두고 있기..
[iOS_Intro] 4. 데이터 ( 코어 데이터 ) Chapter 4. 코어데이터 - 데이터 저장하기 plist plist는 property list의 줄임말로, MAC, iOS 프로그래밍 전용의 속성 리스트로 코어 파운데이션 형식을 이용해서 데이터를 관리할 수 있는 자료구조의 일종이다. Xcode에서 새로운 프로젝트를 만들 때, Info.plist가 만들어진다. Info.plist는 앱 아이콘뿐만 아니라 애플리케이션이 로드할 메인 스토리보드 파일, 애블리케이션 버전 등의 정보를 포함한다. 이 plist는 Xcode를 이용하여 만들고 편집할 수 있다. 코어데이터 ( Core Data ) 코어데이터는 객체와 조합을 이룬다. 코어 데이터의 기능 데이터를 로딩하거나 저장할 수 있는 기능 객체를 로드하고 저장하는 기능 다양한 방식으로의 데이터 저장 되돌리기, 다..
[iOS_Intro] 3. 테이블, 뷰 Chapter 3. 테이블, 뷰계층 데이터 일반적으로 데이터는 부모-자식 관계, 즉 고수준 데이터와 상세 데이터로 구성될 때가 많다. 이런 데이터를 계층 데이터라고 부르며 이를 테이블 뷰와 상세 뷰를 나누어 해결할 수 있다. 각 뷰를 어떻게 활용할 지는 사용자에게 전달하려는 것이 무엇인가? 사용자는 뷰와 어떻게 상호작용할 것인가 이 두 가지를 생각하여 결정해야한다. 하나의 함수가 하나의 역할만 하도록 함수를 설계하듯이 한 화면에서는 한 번에 한 태스크만 집중할 수 있도록 뷰를 설계하는 것이 좋다. 각 뷰는 특별한 목적이 있어야 하며, 필요한 정보를 사용자가 쉽게 이해하고, 사용할 수 있도록 뷰를 설계해야 하는 것이다. 이러한 각각의 규칙을 애플에서 제정해놓은 문서가 있는데, 그것이 HIG ( Human ..