//
// main.m
// 1030内存管理
//
// Created by 非凡程序员 on 15/10/30.
// Copyright (c) 2015年 Querida. All rights reserved.
//
//内存管理目的:为了减少程序所使用的内存
//内存管理黄金法则:谁创建、谁释放。谁retain 谁release
//注意:在OC里,每个创建的对象都会内置了一个计数器,当对象被创建的时候,该计数器为1,当对象将要释放器的时候,计数器显示为1,但是即将释放
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Person.h"
int main(int argc, const char * argv[]) {
//创建一个对象 默认计数器为1
Dog *Dog1=[[Dog alloc]init];
Dog *Dog2=[[Dog alloc]init];
Dog *Dog3=[[Dog alloc]init];
[Dog1 setName:@"哈士奇"];
[Dog2 setName:@"旺财"];
[Dog3 setName:@"哈哈"];
NSLog(@"%li",[Dog1 retainCount]);
NSLog(@"%li",[Dog2 retainCount]);
NSLog(@"创建好之后的Dog3:%li",[Dog3 retainCount]);
[Dog1 release];
[Dog2 release];
// NSLog(@"dog 对象被创建,对象内存地址为:%p",dog1);// %p 内存地址 对象被创建就有计数器
//打印当前对象的计数器 retainCount
// NSLog(@"dog 对象计数器为:%li",[dog1 retainCount]); //%li 长整型 /%lu 无符号长整型
//释放一个对象,请用dealloc
//需要用reclase即计数器-1
Person *newPerson=[[Person alloc]init];
newPerson.name = @"自己";
newPerson.dog=Dog3;
NSLog(@"Dog3给人之后的:%li",[Dog3 retainCount]);
// Dog *Dog4=[[Dog alloc]init];
// newPerson.dog=Dog4;
// NSLog(@"%li",[Dog4 retainCount]);
NSLog(@"%li",[Dog3 retainCount]);
[Dog3 release];
// NSLog( @"%li",[Dog4 retainCount]);
return 0;
}