달력

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. 26. 20:28

[14일차]객체의 복사 Objective-C2010. 5. 26. 20:28

* 얕은복사
int *p = (int *)malloc(4);
int *q = p;
*p = 10;
printf("%d",*p);
printf("%d",*q);
*p =20;
printf("%d",*q);


* 깊은복사
int*p=(int *)malloc(4);
*p=10;
int *q = (int*) malloc(4);
*q=*p;
printf("%d",*p);
printf("%d",*q);
*p=20;
printf("%d",*q);

ex)copy와 mutablecopy는 얕은복사
#import <foundation/NSObject.h>
#import <foundation/NSArray.h>
#import <foundation/NSString.h>
#import <foundation/NSAutorelease.h>
int main()
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
    NSMutalbeArray * ar1 = [NSMutalbeArray arrayWithObjects:[NSMutableString:@"1"],[NSMutableString:@"2", [NSMutableString:@"3"],nil];
NSMutableArray *ar2;
NSMutalbeString *str;
int i;
NSLog(@"ar 1의 요소");
NSLog(@"--------");
for(i=0; i<[ar1 count];i++)
    NSLog(@"%d",[ar1 objectAtIndex: i]);
    ar2=[ar1 mutableCopy]; 
    str=[ar1 objectAtIndex:0];
    [str app;endString:@"1"];
    NSLog(@"---------");
    NSLog(@"ar2의 요소");
    NSLog(@"---------");
    for(i=0;i[ar2 count];i++)
        NSLog(@"%@",[ar2 objectAtIndex:i]);

[ar1 release];
[ar2release];
[pool drain];
system("pause");
return 0;
}

3. Copy의 구현
=>NSObject 클래스의 NSCopying프로토볼이 선언
=>NSObject 클래스에는 실제구현되어 있지 않음
   이 메서드는 내부적으로
  -(id)copyWithZone:(NSZone *)
                             //heap에 관련된 클래스0
                                메모리할당시 allocwinthzone: nose객체를 이용하면 비슷한 경험이 생김

따라서 copy메서드를 사용하고자 하는 경우 위의 메서드를 출현
:
Posted by 에너지발전소