달력

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. 13. 21:21

[6일차]매개변수가 있는 @selector Objective-C2010. 5. 13. 21:21


매개변수가 있는 경우의 @selector(메서드): 형태로 정의하고 매개변수를 받아서 실행할때는
performselector : @ selectro(메서드) : withobject : 매개변수의 형태로 호출합니다.
매개변수에 인스턴스가 아닌것을 대입하게 되면 실행시 에러가 발생합니다.

ex>----------------------------------------------------------------------------------------
#import <foundation/foundation.h>
#import <stdio.h>

@interface Test : NSObject
{
   @public
      int n;
}
-(id)init:(int) a;
-(void)Disp:(Test*)Temp;
-(void)Print:(Test*)Temp;
@end

@implementation Test
-(id)init:(int)a
{
   self = [super init];
   if(self !=nil)
      n=a; //return self
}
-(void)Disp:(Test*)Temp
{
   NSLog(@"%d",++(Temp->n));
}

-(void)Print:(Test*)Temp
{
   NSLog(@"%d",--(Temp->n));
}
@end

int main()
{
  Test *obj = [[Test alloc]init:5];
  int  sel;
  NSLog(@"숫자를 입력하세요 1.Disp 2:Print");
  scanf("%d",&sel);
  SEL dele; //SEL타입의 변수 선언
  if(sel==1)
     dele=@selector(Disp:);
  else
     dele=@selector(Print:);
 
  [obj performSelector:dele withObject:obj];
  system("pause");
  return 0 ;
}  
----------------------------------------------------------------------------------------

extern   
ex)
----------------------------------------------------------------------------------------
//test.h
#import <foundation/foundation.h>

@interface Test : NSObject
-(void)setGlobal:(int)val;
@end

----------------------------------------------------------------------------------------
//test.m
#import "test.h"

@implementation Test
-(void)setGlobal:(int)val
{
   extern g_value; //외부에 있는 g_value를 사용
   g_value = val;
}
@end
----------------------------------------------------------------------------------------
//main.m
#import "test.h"
int g_value = 10;

int main()
{
   Test *obj = [[Test alloc]init];
   NSLog(@"%d",g_value);
   [obj setGlobal :1000];
   NSLog(@"%d",g_value);
   system("pause");
   return 0;
}  
----------------------------------------------------------------------------------------

enum
1. 정수를 상수화해서 사용하는 개념
2. 열거형
선언방법
enum 이름 {멤버(=값)..... .. .. .. .}
                 ==> 초기값이 없으면 :0 부터 시작
                 ==> 초기값이 있으면 :그 숫자부터 시작
ex)
enum Month {Jan,Feb.. .. .. } ->진행중에 다시 초기화 가능
                      0    1
정수처럼 활용 가능 ex) Jan == 1 -> 가능
-----------------------------------------------------------------------------------------------
#import <foundation/foundation.h>
#include <stdio.h>

int main()
{
   enum month {janurary=1,february,march,april,may,june,july,august,september,october,november,december};
   enum month InputMonth;
   int days;
   BOOL flag;

   while(YES)  //무한반복
   {
      flag=YES;
      NSLog(@"월을 입력하세요");
      scanf("%i",&InputMonth);

      switch(InputMonth)
      {
      case janurary:
      case march:
      case may:
      case july:
      case august:
      case october:
      case december:
           days = 31;
           break;
          
      case april:
      case june:
      case september:
      case november:
           days = 30;
           break;
                     
      case february:                                                                                                        
           days = 28;
           break;
 
      default:
           NSLog(@"잘못 입력하셨습니다.");
           days=0;
           flag=NO;
           break;

      if(flag==YES)
         break;
      }
   }
      if(days!=0)
         NSLog(@"날짜 수 :%i",days);
         system("pause");
      return 0;
}                              
-----------------------------------------------------------------------------------------------

형변환
묵시적형변환 : 자동으로 수행되는 형변환
==>10/3 의 값은?
명시적형변환 : 강제 형변환

typedef
자료형의 이름에 별명 붙이는 것
ex) typedef int integer;
      typedef Test* T;
      SEL, id 의 경우는 * 없이 사용하는데 이미 typedef가 되어 있는 상태임.

NSNumber 클래스

1. NS자료형 클래스 : 일반 자료형의 클래스
                              이름 자체가 데이터 -> NSString a = @"Hello";
   ex)NSInteger, NSUInteger
        - isEqualToNumber : 비교(같은지 비교하여 BOOL 타입 리턴)
          compare : 비교(크기까지 비교) 리턴->
                          NSOrdered Ascending (앞의 결과가 작은 경우),
                          NSOrdered Descending (뒤의 결과가 작은 경우),
                          NSOrdered Same (동일한 경우)
2. NSNumber : 숫자에 관련된 클래스
                      numberWith자료형 - 값을 대입받는 메서드
                      자료형 value - 값을 리턴하는 메서드
                      initWith자료형 - 초기화
3. 자체메서드가 내장되어 있음

-----------------------------------------------------------------------------------------------
#import <foundation/foundation.h>

int main(int argc, char *argv[])
{
   NSNumber *myNumber, *floatNumber, *intNumber;
   // 포인터 타입
   NSInteger myInt; // *을 붙이지 않음

   intNumber = [NSNumber numberWithInt:100]; // 참조형
   myInt = [intNumber integerValue];         // value형

   NSLog(@"%li",(long)myInt);
  
   myNumber=[NSNumber numberWithLong:0xabcdef]; //16진수
   NSLog(@"%lx",[myNumber longValue]);
  
   myNumber=[NSNumber numberWithChar:'X'];
   NSLog(@"%c",[myNumber charValue]);
  
   myNumber=[NSNumber numberWithFloat:100.00];
   NSLog(@"%g",[myNumber floatValue]);
  
   myNumber=[NSNumber numberWithDouble:12345e+15]; // 지수형 - 12345 의 15배수
   NSLog(@"%lg",[myNumber doubleValue]);  
   NSLog(@"%i",[myNumber integerValue]);     
  
   if ([intNumber isEqualToNumber:floatNumber] == YES)
       NSLog(@"Numbers are equal");     
   else
       NSLog(@"Numbers are not equal");        

   if([intNumber compare:myNumber] == NSOrderedAscending) //오름차순
       NSLog(@"First number is less than second");     
   else
       NSLog(@"First number is not less than second");           
  
   system("pause");
   return 0 ;
}
-----------------------------------------------------------------------------------------------

:
Posted by 에너지발전소