愚蠢的问题,但为什么我们在声明财产时需要使用“保留”?当它被分配一些东西时,它不会被保留吗?
看这个例子,好像一个对象在分配的时候是自动保留的,那么有什么意义呢?
#import "Fraction.h"
#import <stdio.h>
int main( int argc, const char *argv[] ) {
Fraction *frac1 = [[Fraction alloc] init];
Fraction *frac2 = [[Fraction alloc] init];
// print current counts
printf( "Fraction 1 retain count: %i\n", [frac1 retainCount] );
printf( "Fraction 2 retain count: %i\n", [frac2 retainCount] );
// increment them
[frac1 retain]; // 2
[frac1 retain]; // 3
[frac2 retain]; // 2
// print current counts
printf( "Fraction 1 retain count: %i\n", [frac1 retainCount] );
printf( "Fraction 2 retain count: %i\n", [frac2 retainCount] );
// decrement
[frac1 release]; // 2
[frac2 release]; // 1
// print current counts
printf( "Fraction 1 retain count: %i\n", [frac1 retainCount] );
printf( "Fraction 2 retain count: %i\n", [frac2 retainCount] );
// release them until they dealloc themselves
[frac1 release]; // 1
[frac1 release]; // 0
[frac2 release]; // 0
■输出
分数 1 保留计数:1
分数 2 保留计数:1
分数 1 保留计数:3
分数 2 保留计数:2
分数 1 保留计数:2
分数 2 保留计数:1
释放分数
释放分数
这真让我抓狂!