본문 바로가기

NSString 클래스 NSString 클래스Foundation Framework 의 NSString 클래스에 대해 알아보자. Objective-C 에서 문자열을 다루는 표준클래스이다. 사용 형태NSString *이름 = @"Ohl WOrld!"; 특징1) 내부적으로 문자열을 Unicode화 해서 사용하기 때문에 문자열 앞에 @를 표기.2) NSString은 내용을 바꿀 수 없음.3) 내용을 바꾸려면 NSString 클래스를 상속받은 가변형 NSString인 NSMutableString 클래스를 사용. initWithBytesstringWithFormatinitWithData:encoding:rangeOfStringcomponentsSeparatedByString 등등 자주 쓰이는 메소드들이 있지만 따로 정리하진 않고, 관련 ..
구조체 Struct 구조체 Struct C언어에서의 구조체를 여기서도 사용할 수 있다. ex) #import struct my_struct{ int old; int height; float weight; char* name; }; int main(int argc, const char * argv[]) { @autoreleasepool { struct my_struct man; man.name = "melong"; man.old = 24; man.height = 172; man.weight = 59.3; struct my_struct man2 = {28,165,55,"mango"}; } return 0; } ==> 결과 : 잘 돌아감. But ! 구조체 멤버로 Objective-C 타입 객체를 하나라도 넣을 경우 -> 에러 ..
블록 (Block) 블록 (Block) 블록이란 코드의 묶음이다.코드의 묶음이므로 코드의 성질을 따서 묶음의 코드를 실행할 수도 있고,하나로 묶인 코드 묶음을 하나의 객체로 취급할 수도 있다. 즉, 코드의 성질과 객체의 성질을 모두 띈다. 따라서 블록(); 호출 시 메소드 처럼 동작하며 블록 안의 명령 코드들이 실행되고,객체의 성질을 빌려 메소드 호출 시 파라미터로 넘길 수도 있고, 프로퍼티 형식 혹은 반환 형식도 될 수도 있다. 블록 선언과 구현 인자가 (void)라면 생략해도 됨. 블록 사용(호출) - 블록의 코드 성질 int main(int argc, const char * argv[]) { @autoreleasepool { void (^greeting)(void) = ^(void){ NSLog(@"Hello Worl..
NSData 다루기 (바이너리 데이터 저장/복원) NSData 다루기 (바이너리 데이터 저장/복원) 아카이버 글에서 다뤘듯이, NSData로 데이터를 저장/복원 할 때에도 NSKeyedArchiver, NSKeyedUnarchiver 클래스를 사용함. 1) 단일 객체 저장/복원+(NSData *)archivedDataWithRootObject:(id)rootObject; //NSData 형태로 받을 때+(id)unarchiveObjectWithData:(NSData *)data; //NSData를 객체로 반환 받을 때아카이버의 클래스 메소드를 이용.로 클래스 메소드를 통해서 간단하게 가능하다. 2) 다수의 객체를 저장/복원1)번과 같이 클래스 메소드로 가능하지 않음. 인코딩1) NSMutableData 객체 생성2) NSMutableData 객체를 인자..
아카이빙(Archiving) 아카이빙(Archiving): 객체를 저장 / 복원 하는 기능. 1) XML 형태로 저장 / 복원XML 형태로 plist (property list)를 저장.plist 작성 방법은 NSArray 배열 객체를 만들고 객체들을 Array에 담은 후에 NSArray에서 제공하는 writeToFile 메소드로 파일로 보내면 됨. ★★특정 클래스만 가능 (커스텀 클래스를 저장하려하면 에러)[제한된 클래스 종류]NSStirngNSArrayNSDictionaryNSDateNSDataNSNumber는 클래스 자체에서 제공하는 I/O기능으로 저장하면 됨. ex) 실행파일(main.m) #import #import "Cat.h" int main(int argc, const char * argv[]) { @autorelea..
프로토콜 (Protocol) 프로토콜 (Protocol): C와 C++의 Virtual Class를 떠올리면 됨. 클래스 구성을 다시 짚어보면, 클래스는 인터페이스(.h)와 구현(.m)의 결합. 인터페이스는 외부의 사용설명서 역할을 하였음. 프로토콜은 구현부가 없음. 헤더 파일만 존재.클래스에서 프로토콜을 '채택'하여 기능을 구현. 클래스의 구현부에서 프로토콜 메소드를 정의한 후에, 사용은 일반 클래스 메소드처럼 호출하면 됨. 프로토콜에 프로퍼티도 선언 가능하나, 클래스에서 채택 후 getter/setter나 synthesize 만들어야함. 클래스에서 채택 후 필수로 구현해야할 요소는 프로퍼티 선언부에서 @required 이후에 명시하면 되고,선택사항은 @optional 아래에 명시하면 됨. [프로토콜 생성] [프로토콜] Bark...
클래스 내부 구성요소 숨기기 클래스 내부 요소 숨기기 ( Private ) 헤더 파일은 외부에 공개됨. 내부에서 사용하는 항목을 감춘다면(멤버변수, 메소드), 외부에서 볼 때 간소화 효과. 1) 멤버변수 숨기기멤버 변수를 .h파일에 정의하지 않고 .m파일에 정의하면 됨. 2)메소드 숨기기.m(구현부)에만 정의, 구현하면 됨.카테고리 형식으로 private interface 를 정의. (이름 없는 카테고리 생성)카테고리 선언도 정의도 모두 .m파일에서 함.=> class continuation 이라고 함 직접 호출하면 에러.@selector를 통해서 간접 호출은 가능.
카테고리 Category 카테고리 (Category) 클래스가 가지고 있는 행위들을 일정한 기준으로 나누는 것==> 복잡한 바탕화면에서 폴더 여러개를 만들어 분류하는 것을 떠올리면 됨. => 깔끔하고 정돈됨. ㅎ.ㅎ 기존 클래스를 카테고리를 통해 확장도 가능.[카테고리 선언부]1) 원본 클래스에 정의할 경우@interface cate(Enroll) //cate 클래스의 Enroll 카테고리 생성+(void)enroll; //Enroll 카테고리로 분류된 cate 클래스의 메소드 @end처럼 클래스 선언부와 유사한데 클래스_이름(카테고리_이름) 으로 선언 2)별도 파일로 정의할 경우카테고리 파일 이름 : 원본클래스명+카테고리명ex) Stuend+Enroll.h 파일 생성 -> import 하여 사용. Objective-C 파일 생..