[5일차]NSObject 클래스 Objective-C2010. 5. 12. 19:18
NSObject 클래스
1. objective-c의 최상위 클래스
2. 모든 클래스는 이 클래스로부터 반드시 상속받아야 함
1) 멤버변수
Class isa : 인스턴스 생성시 클래스 타입
2)인스턴스-클래스 관련 메서드
-(class)class ->인스턴스메서드
+(class)class ->클래스메서드
-(id)self : 자기 자신의 id를 리턴 -> 반드시 implementaion(구현부) 에서만 사용
-(BOOL)isMemberOfClass:(Class)aClass
-(BOOL)isKindOfClass:(Class)aClass
3)메모리 생성과 해제
+(id)alloc : 메모리 할당하고 retainCount 를 1로 초기화 - 재정의 안됨
-(void)dealloc : retaionCount에 상관없이 메모리 공간해제 -재정의 가능
-(id)retain : retaincount 1 증가시키고 자기자신의 id를 리턴
-(NSUinteger)retainCount : 인스턴스 참조 횟수
-(id)init : 초기화하고 아이디 리턴
+(void)initialize : init이전에 호출. 0으로 채워줌 - 재정의 안됨
+(id)new : alloc 과 init 조합. init이 재정의 되어 있으면 문제가 됨 - 재정의 안됨
-(void)release : retainCount 1 감소. retainCount가 0이 되면 자동적으로 dealloc를 호출
4)객체의 비교
-(BOOL)isEqual : (id)Object
==>id를 비교해서 리턴
------------------------------------------------------------------------------------------------
#import <foundation/foundation.h>
@interface Test : NSObject
{int a;}
-(BOOL)isEqual:(Test*)Temp; //
@end
@implementation Test
-(BOOL)isEqual:(Test*)Temp
{
if(a==Temp->a) // Temp의 매개변수를 비교할 경우 동일한 것으로 인식.
{
return YES;
} else {
return NO;
}
}
@end
int main()
{
Test * obj = [[Test alloc]init];
Test *copyobj = obj;
Test *Ins = [[Test alloc]init];
if([obj isEqual : copyobj])
NSLog(@"2개 인스턴스는 동일합니다");
else
NSLog(@"2개 인스턴스는 다릅니다");
if([obj isEqual : Ins])
NSLog(@"2개 인스턴스는 동일합니다");
else
NSLog(@"2개 인스턴스는 다릅니다"); // id를비교할 경우 주소가 다르기 때문에 다른것으로인식
system("pause");
return 0 ;
}
------------------------------------------------------------------------------------------------
5)클래스와 객체의 설명
+(NSString *)description : 클래스 이름을 문자열로 리턴
-(NSString *)description : 클래스 이름과 id리턴 ->결과값을 예측하면 안됨
특정 클래스 타입의 인스턴스들은 다른 값을 리턴하기도 함 - 오버라이딩 되어 있음
NSString 상수 : 인스턴스
@selector : 함수포인터, delegate
@selector(method_name) : 정의된 메소드 이름을 리턴해 준다.
아래와같이 똑같은 형태의 메서드일 경우
(void) A()
(void) B()
(void) C()
호출하기 위해서는 A(), B(), C() 와 같은 형태로 불러야 함.
오버라이딩 하기위해서는 메소드간에 상속관계에 있어야 함.
(void) A() : super
(void) B(): super(void) A(): super
(void) C(): super(void) A(): super
상위클래스의 인스턴스변수는 하위클래스의 인스턴스변수를 받을 수 있다.
super X = X->A()
------------------------------------------------------------------------------------------------
//ex>매개변수가 없는 selector의 사용
#import <foundation/foundation.h>
@interface Test : NSObject
-(void)Disp;
-(void)Print;
@end
@implementation Test
-(void)Disp
{
NSLog(@"Disp 입니다");
}
-(void) Print
{
NSLog(@"Print 입니다");
}
@end
int main()
{
int x;
Test * obj = [Test new];
[obj Disp];
// SEL T = @selector(Disp);
// [obj performSelector:T]; //실행시 결정되기 때문에 약간 지연됨.
// [obj performSelector :@selector(Disp)]; // SEL 타입으로 리턴, 이렇게 쓰는 경우는 거의없음
NSLog(@"숫자를 입력하세요 1:disp,2:print");
scanf("%d",&x);
SEL T;
if (x==1)
T = @selector(Disp);
else
T = @selector(Print);
[obj performSelector :T];
system("pause");
return 0;
}
------------------------------------------------------------------------------------------------