NSCopying & NSCoding Example Code
#import <Foundation/Foundation.h>
@class Foo;
@interface Fraction:NSObject<NSCoding, NSCopying>{
int numerator;//
@public int denominator;//
Foo *foo;
}
-(void)setNumerator:(int)aNumerator;
-(void)setDenominator:(int)aDenominator;
-(int)numerator;
-(int)denominator;
-(void)setFoo:(Foo *)aFoo;
-(Foo *)foo;
@end;
#import <Foundation/Foundation.h>
#import "Fraction.h"
#import "Foo.h"
@implementation Fraction
-(void)dealloc{
NSLog(@"foo retainCount1 : %d", [foo retainCount]);
[foo release];
[super dealloc];
}
-(void)setNumerator:(int)aNumerator{
self->numerator = aNumerator;
}
-(void)setDenominator:(int)aDenominator{
self->denominator = aDenominator;
}
-(int)numerator{
return self->numerator;
}
-(int)denominator{
return self->denominator;
}
-(void)setFoo:(Foo *)aFoo{
[aFoo retain];
[foo release];
foo = aFoo;
}
-(Foo *)foo{
return foo;
}
//implementation NSCoding protocol
- (void) encodeWithCoder: (NSCoder*)aCoder{
[aCoder encodeInt:numerator forKey:@"numerator"];
[aCoder encodeInt:denominator forKey:@"denominator"];
[aCoder encodeObject:foo forKey:@"foo"];
}
- (id) initWithCoder: (NSCoder*)aDecoder{
self = [super init];
if (self){
numerator = [aDecoder decodeIntForKey:@"numerator"];
[self setNumerator:numerator];
denominator = [aDecoder decodeIntForKey:@"denominator"];
[self setDenominator:denominator];
[self setFoo:(Foo *)[aDecoder decodeObjectForKey:@"foo"]];
}
return self;
}
//implementation NSCopying protocol
//copyWithZone:(NSZone *)zone,mutableCopyWithZone: (NSZone*)zone autorelease
- (id) copyWithZone: (NSZone*)zone{
//return self;//
Fraction *aFraction = [[[self class] allocWithZone:zone] init];
[aFraction setNumerator:numerator];
[aFraction setDenominator:denominator];
[aFraction setFoo:foo];
return aFraction;
}
+ (void) load{
NSLog(@"Auto called the load function.");
}
@end
main
#import <Foundation/Foundation.h>
#import "Fraction.h"
#import "Foo.h"
int main (int argc, const char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Foo *foo = [[Foo alloc] init];
Fraction *f = [[Fraction alloc] init];
[f setNumerator:10];
[f setDenominator:20];
[f setFoo:foo];
[foo release];
NSLog(@"numerator : %d", [f numerator]);
NSLog(@"denominator : %d", [f denominator]);
NSLog(@"foo : %@", [f foo]);
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:f];
[data writeToFile:@"fraction.db" atomically:NO];
[f release];
/* NSCoding, ,
*/
Fraction *f1 = [NSKeyedUnarchiver unarchiveObjectWithFile:@"fraction.db"];
NSLog(@"numerator1 : %d", [f1 numerator]);
NSLog(@"denominator1 : %d", [f1 denominator]);
NSLog(@"foo1 : %@", [f1 foo]);
NSLog(@"retainCount1 : %d", [f1 retainCount]);
/*
* NSCopying, copy , .
* copy , copy retain, obj
*
*copyWithZone:(NSZone *)zone,mutableCopyWithZone: (NSZone*)zone autorelease
*/
Fraction *f2 = [f1 copy];
NSLog(@"numerator2 : %d", [f2 numerator]);
NSLog(@"denominator2 : %d", [f2 denominator]);
NSLog(@"foo2 : %@", [f2 foo]);;
NSLog(@"retainCount2 : %d", [f2 retainCount]);
[f2 release];
[pool drain];
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Error configuring application listener of class org.springframework.web.context.ContextLoaderListeneSolution: 1. Copy org.springframework.web-3.0.5.RELEASE.jar to the WEB-INF/lib directory 2. Add in web.xml contextConfig...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.