콘텐츠로 건너뛰기
Home » Development » Cocoa » Page 7

Cocoa

[Objective-C] 메시지로부터 메소드가 호출되는 과정

objc_msgSend 함수와 메시징 매커니즘

objective-c에서는 객체의 메소드를 호출하는 것을 객체에게 메시지를 보낸다라고 표현한다. 이는 메소드 자체를 객체화하는 디자인 패턴과 쉽게 익숙해질 수 있게 하려는 포석이기보다는 실제로 메소드의 호출이 메시지를 보내는 형태로 구현이 되어있기 때문이다. objective-c의 이러한 메시징 매커니즘을 이해하려면 몇 가지 깊숙한 곳의 내용을 찬찬히 들여다 볼 필요가 있다.

더 보기 »[Objective-C] 메시지로부터 메소드가 호출되는 과정

macOS의 메모리 관련 설명

메모리 성능 관리 지침

도입

메모리는 모든 프로그램이 사용하는 중요한 시스템 자원이다. 프로그램은 실행되기 전에 반드시 메모리로 로드되어야 하고, 실행되는 동안에는 명시적으로나 묵시적으로 추가적인 메모리를 할당받아 프로그램에서 사용하는 정보를 담고, 조작할 수 있게 한다. 프로그램의 코드와 데이터를 위한 메모리상의 공간을 만드는 작업은 시간과 비용이 드는 일이며, 따라서 이러한 작업은 시스템의 전체 성능에 영향을 끼친다. 메모리를 많이 사용하는 일을 피하기는 어렵지만, 메모리 사용으로 시스템에 다른 부분에 영향을 끼치는 일은 최소화하는 몇 가지 방법은 있다.

더 보기 »macOS의 메모리 관련 설명

[Cocoa] Cocoa의 MVC

모델-뷰-컨트롤러 디자인 패턴

모델-뷰-컨트롤러(MVC) 디자인 패턴은 꽤 오래된 패턴이다. 다양한 형태의 MVC는 스몰토크의 초창기부터 존재해왔다. MVC는 앱의 전체적인 아키텍처는 물론 앱 내부에서의 객체의 일반적인 역할에 따라 이들을 분류한다. MVC를 구현하는데는 다른 디자인패턴들이 조합되어 사용될 수도 있다.

더 보기 »[Cocoa] Cocoa의 MVC

[CoreGraphics] CGBitmapContextCreate의 CGBitmapInfo 값

CGBitmapContextCreate함수를 사용하여 그래픽 컨텍스트 객체를 만들 때, 사용하는 마지막 파라미터에 대한 의문

함수 원형은 일단 다음과 같다.

CGContextRef CGBitmapContextCreate (
    void *data,     // 통상 NULL을 쓴다.
    size_t width,       // 이미지의 가로 크기
    size_t height,      // 이미지의 세로 크기
    size_t bitsPerComponent,    // 컴포넌트(채널)별 비트 수, 통상 8을 쓴다. (RGBA로 32비트 색상을 쓰니까)
    size_t bytesPerRow, // 한줄에 들어가는 바이트 수. 이는 width * 4가 된다. (32비트가 4바이트니까)
    CGColorSpaceRef colorspace, // 컬러스페이스 객체
    CGBitmapInfo bitmapInfo // 문제의 마지막 파라미터
);

이와 같이 정의되어 있는데, 실제 예제들을 보면 (애플 개발자 문서에서도!) kCGImageAlphaPremultipliedLast 와 같은 값을 넘기는데, 이는 CGBitmapInfo가 아니라 CGImageAlphaInfo에 정의된 상수값이다!! 더 보기 »[CoreGraphics] CGBitmapContextCreate의 CGBitmapInfo 값

[Objective-C] Objective-C의 메모리 관리 방법

Objective-C의 메모리 관리

메모리를 할당하고 해제하지 않는다면 프로그램이 이런 작업을 반복하면 할 수록 계속해서 새로운 메모리를 사용하게 되고, 종국에 가서는 더 이상 쓸 수 있는 메모리가 남아나지 않는 상황이 벌어질 수 있다. 그리고 최근의 OS들의 그 복잡한 구조 때문에 이렇게 잘못 만들어진 프로그램이 아닌 다른 프로그램이 크래쉬될 수 있는 위험도 있다. C 계열 언어에서의 메모리 관리란 매우 중요하면서도 프로그래머의 골치를 썩히는 문제이다.더 보기 »[Objective-C] Objective-C의 메모리 관리 방법

[Obj-C] NSObject 없이 새로운 객체를 만들기

Objective-C는 C의 수퍼셋(상위집합)이다. 따라서 Objective-C의 ‘이상하게 보이는 문법’을 제외하면 온전히 C코드만으로도 프로그램을 작성하는 것은 가능하며, 컴파일도 된다. 물론 이게 C 프로그램하고 다르냐면 그건 또 아니라고 하겠다만.

어쨌거나 현재 Objective-C가 널리 사용되고 있는 플랫폼은 애플의 OSX와 iOS 밖에 없다고 해도 과언은 아니다. 이 말은 곳 Cocoa(코코아는 Foundation과 Webkit 프레임워크의 합집합이다)가 곧 Objective-C의 기본 라이브러리와 거의 같다는 말이다. 특히 Foundation이 그렇다. Foundation에는 그 유명한 NSObject가 정의되어 있고, 실질적으로 프로그래머가 만들거나 혹은 이용하는 모든 클래스는 NSObject로부터 상속받은 객체들이다. (여기에는 예외가 하나 있는데, NSProxy 클래스는 NSObject로부터 상속받지 않는다.) 결국 NSObject 없는 Objective-C는 있을 수 없는 것인가?더 보기 »[Obj-C] NSObject 없이 새로운 객체를 만들기

[Cocoa / Objective-C] NSString의 문자열 뒤집기, 글자를 정렬한 문자열 구하기.

프레임워크에 당연히 있는 기능일 줄 알았는데 없더라… 그래서 자작. 짤막한 설명 문자열 뒤집기는 C문자열로 바꾼다음 포인터를 쓰는게 제일 깔끔할 것 같아서 그렇게 했다. -UTF8String 메소드는 const char 타입 포인터를 리턴하는데, 이걸 char 형으로 강제캐스팅하는 게 찜찜해서 strcpy로 복사했는데, 어디서 이 함수도 상당히 나쁘다고 쓰지 말라더라. (다른 뭐를 쓰라던데 그게 기억이 안나서 그냥 씀) malloc으로 할당한 메모리는 ARC의 관심밖이므로 철저히 free 해주는 나란 남자, 그런 남자… 문자열내 문자들을 사전순으로 정렬해주는 건 소인수 분해 따위나 할 때 쓸모가 있긴 있을텐데,  NSArray의 sortedUsingComparator:… 더 보기 »[Cocoa / Objective-C] NSString의 문자열 뒤집기, 글자를 정렬한 문자열 구하기.

[Objective-C] 카테고리

카테고리는 쉽고도 정말 강력한 Objective-C의 기능 중 하나이다. 카테고리는 기존에 정의된 어떤 클래스를 쉽게 확장할 수 있도록 한다. 만약 A라는 클래스에 부족한 기능이 있어 이를 추가하고자 할 때는 해당 클래스를 상속 받는 클래스 B를 만들 수 있고, 이를 사용하면 된다.1 하지만 이 새롭게 추가된 기능을 사용하기 위해서는 이전에 작성한 코드에서 클래스 A를 사용하는 부분을 모두 클래스 B에 맞도록 수정해야 한다.더 보기 »[Objective-C] 카테고리

Objective-C 리터럴 문법 살펴보기

이 글은 다음 문서를 참고하였음 http://clang.llvm.org/docs/ObjectiveCLiterals.html 애플이 밀고 있는 LLVM 컴파일러 4.0에서부터 Objective-C Literal 이라는 새로운 기능을 사용할 수 있게 되었다. 새롭게 추가된 리터럴은 크게 세 가지로, NSNumber Literals, Colloection Literals, Object Subscripting 이다. 각각을 좀 살펴보자. NSNumber Literals Foundation 프레임웍의 NSNumber 클래스는 스칼라값을 감싸는 객체이다. 객체에 들어갈 수 있는 값은 C에서는 ‘수’로 취급할 수 있던 char, short, int, long, long long 등의 정수들과 Float, double과 같은 실수들 그리고 BOOL, bool 값등이다. 이렇게 숫자값을 객체에 감싼 것을 Boxed values라고도 한다더라.… 더 보기 »Objective-C 리터럴 문법 살펴보기

최근 Xcode의 개선사항

애플은 단지 SDK만 업그레이드하는게 아니라 개발도구도 지속적으로 개선해나가고 있다. Xcode 3 -> 4로 넘어올 때도 상당히 좋아졌는데, 4.5까지 오면서 계속해서 개선되고 있다. What’s new in Xcode 4.3 개별 도구 앱이 하나의 앱 패키지에 통합됨 명령줄 도구를 선택적으로 설치하도록 분리됨 /Developer 디렉터리를 사용하지 않음. 한대의 맥에 다른 버전의 Xcode를 동시에 설치하는 것이가능하며, Xcode는 기존 버전의 Xcode를 삭제하는 기능을 제공함 신규 코코아 프로젝트에서 Auto Layout이 디폴트로 설정됨. What’s new in Xcode 4.4 LLVM 4.0 컴파일러가 적용됨. 이 때부터 NSString외의 객체도 @Literal을 사용할… 더 보기 »최근 Xcode의 개선사항