Objective-C 기초 1
	            
	            	
	최고관리자
	            
            
			
	            2018.04.09 16:02
	            3,830
	            0
	        
        본문
0. 기본
- ANSI C의 상위호환. C 문법을 그대로 쓸 수 있다.
- id 데이터형: 어떤 데이터가 들어올지 알 수 없을 때 자유로이 형변환이 가능하다.
- 함수 호출: 함수를 쓰겠다고 메시지를 보내는 형태. 함수가 없다면 nil을 리턴하기 때문에 에러 때문에 프로그램이 멈추지 않는다.
- Object가 정확하게 지칭하는 바는- variable안에 들어있는 것이다. 둘 구분할 것.
- 주석은 //
- !는 not 을 의미한다.- BOOL자료형 앞에 쓰일 수 있음.
1. 자료형
C 위에 얹혀진 문법이라서 더 쉽게 쓰기 위해 새로운 자료형을 만들었다. C 언어의 operator들은 C의 기본 자료형에 대해서 쓰여지기 때문에 새로운 방식들이 등장한다.
1.1 NSString
- NSLog(@"Hello, Mr. Higgie.");: 출력 함수.
- 문자열: - NSString *firstName = @"Gyubin";- " "앞에- @를 붙이면 문자열을 의미한다.
- 문자열 타입은 NSString이고, 포인터다.
- 물론 사용할 때는 firstName변수명만 사용한다.*빼고.
 
- 출력: - NSLog(@"Hello there, %@.", firstName);- %@로 placeholder를 만들 수 있다. 쉬운 출력.
- 여러개 placeholder 사용 가능.
- 만약 placeholder를 안쓰고 바로 firstName을 출력하려하면 warning 뜬다.
 
- 문자열 잇기1: - stringByAppendingString- message를 nest하는 것 가능하다.
- 단순히 + 연산으로 안된다.
 - NSString *firstName = @"Gyubin"; NSString *lastName = @"Son"; NSString *fullName = [[firstName stringByAppendingString:@" "] stringByAppendingString:lastName]; NSLog(@"My name is %@.", fullName); 
- 문자열 잇기2: - stringWithFormat- format string을 활용한다. placeholder를 이요한 방법.
 - NSString *fullname = [NSString stringWithFormat:@"%@ %@", firstName, lastName]; 
- NSString Class 사용하기. - string 메시지로 빈 문자열 생성: NSString *s = [NSString string];
- 문자열 복사: NSString *s = [NSString stringWithString:anotherString];
 
- string 메시지로 빈 문자열 생성: 
- isEqualToString문자열 같은지 비교:- [@"Gyubin" isEqualToString:@"GGGGGG"]
1.2 NSNumber
- NSNumber *age = @28;:- NSNumber타입에, 역시- *를 붙여서 선언하고, Object 앞에는- @를 붙인다.
- 출력: 문자열에서와 똑같이 - %@placeholder를 쓰면 된다.
- NSLog(@234);이런식으로 못 쓴다. 무조건 placeholder 써야 한다. 숫자를 출력하려면.
- 곱셈하기 - 단순 곱셈이 안된다. Obj-C는 C 위에 얹혀진거라서 *operation은 양 쪽에 C의 Integer형을 받아야한다. 그래서 NSNumber를 못쓴다.
- unsignedIntegerValue메소드를 사용해서- NSUIntegerObject로 바꾼 다음에 더해줘야한다.
 - NSNumber *higgiesAge = @6; NSNumber *phoneLives = @3; NSUInteger higgiesAgeInt = [higgiesAge unsignedIntegerValue]; NSUInteger phoneLivesInt = [phoneLives unsignedIntegerValue]; NSUInteger higgiesRealAge = higgiesAgeInt * phoneLivesInt; 
- 단순 곱셈이 안된다. Obj-C는 C 위에 얹혀진거라서 
1.3 NSArray
- NSArray *apps = @[@"AngryFowl", @"Lettertouch", @"Tweetrobot"];- 타입은 NSArray. 역시 변수 선언할 때*붙인다.
- 배열을 의미하는 [ ]앞에@붙여야 한다.
- 원소 접근은 다른 언어와 비슷하게 apps[0]처럼 인덱스로 한다.
 
- 타입은 
- NSArray는 immutable Object다. 만약 원소를 추가하고 뺀다면 원래 것에서 빼는게 아니라 변경된 NSArray를 새로 만든다. 문자열도 immutable이며 모든 것은 mutable한 counterparts가 존재한다. NSMutableArray,NSMutableString이 있다.
- NSArray *emptyArray = [NSArray array];: 빈 배열 생성.
- 원소 추가:
1.4 NSDictionary
- key, value 쌍으로 이루어진 자료형. 중괄호로 감싸고, key-value는 콜론으로 구분하고, 쌍 끼리는 comma로 구분한다. 파이썬이랑 똑같다.
- NSDictionary *person = @{@"firstName": @"Gyubin"};
- person[@"firstName"]접근은 이렇게 대괄호에 키를 넣어서.
- NSDictionary *emptyDict = [NSDictionary dictionary];
1.5 NSInteger, NSUInteger
- C-layer의 자료형이다. 사칙연산 등의 operator 사용 가능하다.
- 예로 문자열을 length메소드를 통해 길이를 재었을 때 리턴되는 타입이 NSUInteger다.
- *asterisk를 쓰지 않는다. NSLog에서 placeholder를- %@가 아니라 NSUInter의 경우- %lu로 받는다.
NSString *firstName = @"Gyubin";
NSUInteger firstNameLength = [firstName length];
NSLog(@"firstName length is %lu", firstNameLength);1.6 BOOL
- YES,- NO로 표현된다.
- BOOL flag = YES;형태로 사용한다.- *쓰지 않는다.
1.7 ENUM
typedef NS_ENUM(NSInteger, DayOfWeek) {
    DayOfWeekMonday = 1,
    DayOfWeekTuesday = 2,
    DayOfWeekWednesday = 3,
    DayOfWeekThursday = 4,
    DayOfWeekFriday = 5,
    DayOfWeekSaturday = 6,
    DayOfWeekSunday = 7
};
DayOfWeek day = 5;- DayOfWeek이란 타입을 만든 것. 이 타입으로 변수 선언해서 사용.
- 위 코드에선 NSInteger를 실제 값으로 쓰는 것. 다른 타입 가능하다.
- 값을 지정할 수 있는데 위에선 1에서 7까지 지정한 것. 만약 지정 안했으면 0부터 6까지 인덱스로 접근할 수 있다.
2. Message
- [objectName messageName];
- Obj-C에선 메소드를 바로 사용하는 것이 아니라 사용하겠다고 메시지를 보내는 형태다. 대괄호에 타겟 object와 관련된 메소드의 이름을 적으면 된다. - 아래 예제에서처럼 사용하면 된다.
- description은 object를 문자열 형태로 바꿔서 리턴한다. Array는 속한 원소들을 보기 쉽게 나열해주고, 문자열을 넣으면 그냥 문자열이다.
- description을 공식 문서를 보면 (NSString *)description으로 표현되어있다. 리턴 타입이 NSString이란 의미다.
 - NSArray *foods = @[@"tacos", @"burgers"]; NSString *myString = [foods description]; NSLog(@"%@", [foods description]); 
- message를 여러개 nest할 수 있다. 
- 매개변수를 여러개 가질 수 있다. 가독성을 위해 띄워쓴다. - NSString *s = [@"aa bb" stringByReplacingOccurrencesOfString:@"aa" withString:@"AA"]; 
- 타입 별 초기화하기 - 모든 클래스는 alloc메시지에 반응한다. 메모리에 Object가 들어갈 공간을 만드는 역할이다.
- alloc의 리턴 객체는- init을 다시 해줘야 사용가능해진다.
- init보다는- initWithString같은 메시지를 더 많이 사용한다.
 - NSString *emptyString = [[NSString alloc] init]; NSString *emptyString = [[NSString alloc] initWithString:otherString]; NSArray *emptyArray = [[NSArray alloc] init]; NSDictionary *emptyDictionary = [[NSDictionary alloc] init]; 
- 모든 클래스는 
댓글목록 0