본문 바로가기

교육

(93)
[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
[Objective-C] property 1. property변수선언+ setter/getterset 함수 setAgeget 함수 (int)age요렇게 쓰고 클래스 변수.age = 10으로 setter호출클래스 변수.age 로 getter 호출프로퍼티 말고 멤버 변수 접근할때는 클래스변수 -> age로 접근 2. retain/copy/assign- retain @property(nonatomic, retain) NSInteger* number;라고 선언되있다고 가정하자retain으로 설정 시 컴파일러는 setter를 생성할 때 다음과 같이 만든다. -(void) setNumber:(NSInteger*)n{ if(number!=n) { [number release]; number=[n retain]; }}빨간 부분이 주목할 곳이다. 새로운 객체를..
[Objective-C] 메모리 관리 1. 메모리 관리 함수참조계수 출력 : retainCount참조계수 증가 : retain참조계수 감소 : release 2. 샘플 코드 @interface Car :NSObject-(void)dealloc;@end @implementation Car-(void)dealloc{ NSLog(@"dealloc"); [super dealloc];}@end int main(){ Car* p1 = [[Car alloc] init]; NSLog(@"p1 = %lu",[p1 retainCount]); Car* p2 = p1; NSLog(@"p1 = %lu",[p1 retainCount]); NSLog(@"p2 = %lu",[p2 retainCount]); [p2 retain]; NSLog(@"p1 = %lu",[p1 ..