请阅读以下程序,分析程序是否可以运行成功,如果运行成功,请指出p、p2、p3三个对象分别什么时候被释放,及其运行结果,否则,请说明程序运行失败的原因。 1 int main(int argc, const char * argv[]) { 2 @autoreleasepool { 3 Person *p3 = [[[Person alloc] init] autorelease]; 4 NSLog(@"3"); 5 [p3 retain]; 6 @autoreleasepool { 7 Person *p2 = [[Person alloc] init]; 8 NSLog(@"p2---%lu",[p2 retainCount]); 9 @autoreleasepool { 10 NSLog(@"1"); 11 Person *p = [[[Person alloc] init] 12 autorelease]; 13 NSLog(@"p--%lu",[p retainCount]); 14 } 15 NSLog(@"2"); 16 [p2 release]; 17 } 18 [p3 release]; 19 } 20 return 0; 21 }