달력

10

« 2024/10 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2010. 5. 12. 19:18

[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;
}
------------------------------------------------------------------------------------------------

:
Posted by 에너지발전소