iOS Developer38 16. Objective-C 로그/에러 핸들링, 포인터 NSLogObjective-C에서 로그를 찍어보기 위해서는 NSLog를 사용한다.(print 디버깅 신공)NSLog는 Foundation 프레임워크의 일부로 전역함수라 어디서든 호출이 가능하다.형식지정자를 통해 문자열 포메팅이 가능하고, 해당 문자열을 표준 에러 출력으로 보낸다. 다만 불필요한 로그가 너무 많이 찍히면 성능이 떨어질 수 있고, 실기기나 배포버전에서 로그가 찍히는 것은 바람직하지 않기 때문에아래와 같이 디버깅 모드에서만 로그가 출력되도록 할 수 있다. (기본은 디버깅 모드, Release모드로 변경하려면 아래 경로 참고)xCode 상단 탭 product - scheme - Edit scheme - Run- Build-configuration (release 선택)#if DEBUG == 0#.. 2024. 5. 17. 15. Objective-C typedef, type casting typedefObjective-C의 typedef는 Swift의 typealias와 동일한 기능을 수행한다.둘 다 기존 타입에 새로운 이름을 부여하여 가독성을 높이고 코드의 간결성을 유지하는 데 사용된다. //Swift typealias MyUnsignedInt = UInt let value: MyUnsignedInt = 10 Objective-C typedef// 이제 BYTE는 unsigned char 대신 쓰이게 된다.// 구별을 위해 주로 대문자로 작성한다.typedef unsigned char BYTE;BYTE b1; 구조체의 typedef 사용typedef struct Musics { NSString *title; NSString *artist; int playTimeSec;}.. 2024. 5. 17. 14. Objective-C Preprocessor 전처리기 Objective-C의 Preprocessor(전처리기)는 텍스트 대치 도구이고,컴파일러가 실제 컴파일 이전에 요구되는 전처리를 할 수 있도록 한다.(텍스트 삽입, 대치 등) 모든 전처리 명령은 #으로 시작한다. 공백이 아닌 글자로 시작하고 주로 한 줄에 다 작성한다. 매크로란? 코드에서 자주 사용되는 일정한 패턴이나 값을 하나의 이름으로 정의해 반복적인 코딩 작업을 줄여주는 기능#define매크로 상수 정의 MAX_LENGTH를 20으로 대치할 것을 명령한다#define MAX_LENGTH 20 #import전처리기에게 Foundation 프레임워크로부터 foundation.h를 가져오라고 명령한 후 현재 소스 파일에 텍스트를 추가하게 한다.#import #include로컬 디렉토리에서 헤더파일을 불.. 2024. 5. 16. 13. Objective-C Structure 구조체 Objective-C에서 배열에는 '같은 타입'의 요소들을 담을 수 있다. Stucture은 '다양한 타입의 요소'를 담을 수 있는 유저 커스텀 타입이다. 구조체는 주로 특정한 관련 데이터를 묶어서 관리하기 위해 사용된다. 구조체는 클래스와 달리 힙이 아닌, 스택 영역에 할당되고 해제된다. 구조체는 일반적으로 정적으로 크기가 정해져 있기 때문이다. 즉 Object타입이 아니라는 뜻이다. 메세지를 보낼 수 없고, 상속을 지원하지 않으며 다형성을 가지지 않는다. 구조체의 인스턴스는 함수의 콜스택 프레임 내에서 생성되며, 함수가 종료되면 스택 프레임이 제거되면서 구조체 인스턴스도 함께 제거된다. (자동 해제) 따라서 구조체는 명시적으로 메모리 해제를 해줄 필요가 없다.아래 예시 코드를 통해 구조체를 활용하.. 2024. 5. 16. 12. Objective-C Strings 문자열 Objective-C에서 문자열은 NSString 클래스를 사용한다.NSString은 immutable 문자열을 나타낸다. 따라서 객체를 생성한 후에는 내용을 변경할 수 없다.따라서 아예 새로운 객체를 반환하는 메서드가 많다. 이에 자식 클래스인 NSMutableString을 사용하면 필요에 따라 더 유연하게 문자열을 변경할 수 있다. 문자열 관련 메서드는 굉장히 다양하기 때문에 코드와 함께 정리해 보았다.대부분 메서드명을 보면 어떤 기능인지 알 수 있다.#import int main(void) { @autoreleasepool { //기본 생성 및 출력 NSString *greeting = @"hello apple"; NSLog(@"Greetings!: %@\.. 2024. 5. 13. 11. Objective-C Pointers 포인터 동적 메모리 할당과 같은 기능을 포함해 C계열 언어에서 포인터 개념은 필수적이다. 변수는 사실상 메모리 주소이며, &(ampersand)연산자로 접근할 수 있다.#import int main (void) { int var1; char var2[10]; NSLog(@"Address of var1 variable: %p\n", &var1 ); //0x16fdff238 NSLog(@"Address of var2 variable: %p\n", &var2 ); //0x16fdff23e NSLog(@"Size of var1: %d, size of var2: %d,",sizeof(var1),sizeof(var2)); // 4, 10 return 0;} 출력되는 메모리 주소는 계속 변할 수 있고.. 2024. 5. 9. 이전 1 2 3 4 5 ··· 7 다음