본문 바로가기

교육/Objective-C

(15)
[Objective-C] NSString parsing NSString을 특정 문자열 기준으로 parsing 하는 법자주쓰고 있는데 안적혀있어서 적음 NSString* string = @"1234 1234"; NSArray* array = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];위와 같이 사용하면 array에 [1234, 1234]로 들어온다.
[Objective-C] 지연된 초기화 1. 지연된 초기화property는 실제 객체를 사용할 때 초기화 된다.그래서 객체의 init시점에서 찍어보면 nil값이 나오고self.객체 등으로 getter를 호출하면 그 때 메모리 주소 값이 찍힌다.대표적인 예가 self.view아이폰 라이브러리 대부분이 지연된 초기화 기법을 사용한다. 2. 샘플 코드 @interface Car : NSObject@property (strong, nonatomic) NSArray* arr; @end @implementation Car-(NSArray*) arr // getter{ NSLog(@"getter"); if(_arr == nil) { _arr = [NSArray arrayWithObjects:@"사과", nil]; NSLog(@"arr 자원 주소 : %p"..
[Objective-C] c function pointer 1. function pointerc 함수포인터 처럼, objective-C에서도 함수포인터 얻어와서 호출할 수 있다. 2. 샘플 코드@interface Car : NSObject-(void) go:(int)a speed:(int)s;@end @implementation Car-(void)go:(int)a speed:(int)s{ NSLog(@"Car go : %d %d",a,s);}// go(id obj, SEL s, ...)로 변경 됌@endid CreateObject(NSString* name){ Class c = NSClassFromString(name); return [[c alloc] init];}void foo(id obj){ //obj가 Car인지확인 if ([obj isKindOfClas..
[Objective-C] category 1. category 기존 객체를 상속받아 원하는 문법을 사용하고 싶을 때 사용 class상속처럼 : superclass 하지 않고 NSString () 위와 같이 ()안에 원하는 문구 넣어서 사용함 멤버 데이터는 추가하지 못함 프라퍼티는 추가 가능하지만 getter 함수를 재정의 해야함(워닝뜸) 2. 샘플 코드 // 멤버 데이터를 추가하려면 associated object 문법 @interface NSString(test) -(void)foo; @end @implementation NSString(test) -(void)foo { NSLog(@"foo"); } @end int main() { NSString* s1 = @"hello"; // nsstring에 특정함수 추가 [s1 foo]; return..
[Objective-C] protocol 1. protocol대표적으로 프로토콜 사용하는 것이 delegatedelegate는 1:1 객체 간의 강한 결합NotificationCenter는 중간에 notificationCenter가 있기 때문에 유연하다. 1:N의 관계를 가진다. 2. 샘플 코드@class LocationManager;@protocol LocationManagerDelegate -(void) updateLocation;-(void) failToUpdate;@end @interface LocationManager:NSObject@property(nonatomic,assign) id delegate;-(void)start;@end @implementation LocationManager-(void)start{ //gps사용 위치 구..
[Objective-C] kvo(key value observing) 1. kvo(key value observing)해당 key의 value가 변할 때 통보받을 수 있는 방법 2. 샘플 코드 @interface People : NSObject@property (retain, nonatomic) NSString* name;@property (retain, nonatomic) NSString* addr; @end @implementation People//@synthesize name,addr;@end@interface Car : NSObject-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;@end@i..
[Objective-C] kvc(key value coding) 1. kvc(key value coding)key를 가지고 value를 설정하거나 value를 가져올 수 있다.이 것을 기반으로 프로그래밍 하는 기술아래 샘플과 같이 사용할 수 있다. 2. 샘플 코드@interface People : NSObject@property (retain, nonatomic) NSString* name;@property (retain, nonatomic) NSString* addr; @end @implementation People@synthesize name;@synthesize addr;@end int main(){ People* p1 = [[People alloc] init]; p1.name = @"kim"; // 프라퍼티 일반 방식 NSLog(@"%@",p1.name); ..
[Objective-C] block 1. 블럭코드 덩어리를 가리키는 변수자비의 clouser, c++ 람다변하지 않는 코드에서 변하는 코드를 블럭으로 분리할 수 있다.인자가 없는 블럭은 ()생략 가능전역 변수, static 지역변수, __block변수는 변수로서 포함됨지역변수는 값(상수)로 변해서 블럭에 포함됨Block_copy : 원래 스택영역에 만들어지는 블럭코드를 힙 영역으로 옮겨줌함수에 블럭을 넘길 경우 블럭이 &(int a){NSLog(@"%d",a);} 라면 void(^b)(int)=^(int a){}; 이니 형은 void(^)(int)형이 된다.따라서 함수에 쓰면 foo:((void)(^)(int))b 가 된다.c++ 람다- sort(x, x+10,[](int a, int b){return a