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