#import <Foundation/Foundation.h>
//-----------interface section ----------
@interface Fraction : NSObject
{
int numerator;
int denominator;
}
-(void) print;
-(void) setNumerator:(int) n;
-(void) setDenominator:(int) d;
@end
//-----------implementation section ----------
@implementation Fraction
-(void) print
{
NSLog(@"%i/%i",numerator,denominator);
}
-(void) setNumerator:(int) n
{
numerator = n;
}
-(void) setDenominator:(int) d
{
denominator = d;
}
@end
//-----------program section ----------
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
//인스턴스 생성 및 초기화 : *를 사용하여 사용할 클래스의 레퍼런스 또는 포인터를 의미
Fraction*myFraction = [[Fraction alloc] init];
/*
또는 아래처럼 순서대로 설정
myFraction = [Fraction alloc]; - Fraction형을 myFraction으로 지정하다(인스턴스를 생성하다,메모리에 할당하다)
* alloc는 부모클래스에서 상속받은 것이므로 별도로 구현할 필요가 없다.
* 클래스에 alloc 메시지를 보내 그 클래스의 새로운 인스턴스를 반환 받는다.
* 반환된 클래스는 myFraction에 저장된다.
* alloc는 객체의 모든 인스턴스 변수를 0으로 초기화 한다. 하지만 충분하지 않음으로 init으로 초기화 하여야 한다.
(alloc를 통해 초기화 한 것은 Fraction객체이며 별도로 myFraction을 초기화 하기위해 인스턴스에 init메시지를 보낸다
myFraction = [myFraction init]; - 인스턴스 myFraction을 init(설정하다 or 생성하다.)
* 클래스 인스턴스(myFraction)를 초기화 한다.
*/
//변수값 설정
[ myFraction setNumerator : 1 ];
[ myFraction setDenominator : 3 ];
//myFraction의 출력 메서드 호출
NSLog(@"The value of myFraction is :");
myFraction.print;
//myFraction 인스턴스가 사용한 메모리 해제
* referance count에서 1씩 감소하여 rc가 0이되면 시스템은 객체가 필요없다고 인식하고 메모리에서 제거한다.
[myFraction release];
//시스템에 의하여 foundation에서 사용한 모든 객체풀을 사용하고 나면 시스템에서 자동으로 release하도록 한다.
[pool drain];
return 0;
}