码迷,mamicode.com
首页 > 其他好文 > 详细

OC 高级内存管理

时间:2016-05-09 21:59:53      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

//
//  main.m
//  第8讲
//
/
#import <Foundation/Foundation.h>
#import "teacher.h"
#import "classes.h"
#import "man.h"
#import "woman.h"
#import "Student.h"
#import "Card.h"
/*
 
 类簇:
 多个类的组合,多个类来实现一个类的功能,相当于一个家族,派出一个代表,NSString,NSArray,NSDictionary,NSSet,都是对应的家族代表(代言人),但是oc中只允许但继承,一个类智能集成字一个父类,所以类簇不能有子类
 
 
 */






int main(int argc, const char * argv[]) {
    
    //创建一个classes对象
//    classes *lanou13=[[classes alloc] init];//0--1;
//    //创建teacher 对象
//    teacher *teache=[[teacher alloc] init];
//    NSLog(@"teachecont=%ld",teache.retainCount);
//    
//    
//    teache.name=[NSString stringWithFormat:@"xiaoli"];
//    
//    lanou13.teache=teache;//1--2;
//    //原因 属性调用setter方法时,内部做了一次retain的操作
//    NSLog(@"teachecont=%ld",teache.retainCount);
//    
//    //释放
//    [lanou13 release];//1--0
//    
//    NSLog(@"teachecont=%ld",teache.retainCount);//因为teache对象在lanou13对象销毁时,已经release够一次所以会由2--1.
    
    //teacher *tea=[teacher teacherWithName:@"xiaobai" gender:@"m" age:27];
    //便利构造器内存管理--内部使用alloc 内部使用autorelease 外部无需管理内存
    
    
    //集合内存管理:(数组,字典,集合)
    /*
     集合内存管理:
     1.当往集合内添加元素(对象)时,呢么相应的对象引用计数会+1(会对添加的对象做一次retain操作)
     2.当移除集合内的一个元素(对象)时,被移除的对象引用计数会-1(会对被移除的对象做一次release操作)
     3.当该集合的引用计数为0时,在=销毁几个对象之前,会对集合内部的所有元素对象发送一个release消息,也就是集合内部的元素对象引用计数都会-1;
     
     
     */
    
//    
//    teacher *tea1=[[teacher alloc]init];//0--1
//    teacher *tea2=[[teacher alloc]init];
//    teacher *tea3=[[teacher alloc]init];
//
//    
//    //创建可变数组,将teacher对象添加到数组当中
//    
//    NSMutableArray *teaMutArr=[[NSMutableArray alloc]initWithCapacity:0];//0--1
//    NSLog(@"tea1count=%lu",tea1.retainCount);
//    NSLog(@"teaMutArrcount=%lu",teaMutArr.retainCount);
//    
//    //将我们teacher对象添加到数组当中
//    
//    [teaMutArr addObject:tea1];//1--2
//     NSLog(@"tea1count=%lu",tea1.retainCount);
//    [teaMutArr addObject:tea2];//1--2
//    [teaMutArr addObject:tea3];//1--2
// NSLog(@"teaMutArrcount=%lu",teaMutArr.retainCount);
//    
    //相应release一次
//    [tea1 release];//2--1
//    [tea2 release];//2--1
//    [tea3 release];//2--1
    
//    [teaMutArr release];
//    //teaMutArr  1--0  销毁时,会向tea1, tea2, tea3 对象个发送一次release消息
//    NSLog(@"teaMutArrcount=%lu",teaMutArr.retainCount);
//    NSLog(@"tea1count=%lu",tea1.retainCount);
//    
    
    
    /*
     ARC系统管理内存:
     ARC:自动引用计数(系统自动管理内存),由我们开发人员去开辟内存空间,但是不需要释放该内存空间,系统会自动释放该内存空间,本质上还是基于MRC的,只不过系统会自动添加了释放内存的方法,它不是垃圾回收机制
     
     */
    
    /*
     KVC:Key Value  它是间接访问实例变量的方式,为对象中对应的实例变量赋值调用setValue:forkey:
     
     
     */
    
//    
//    man *ma=[[man alloc]init];
//    ma.name=@"张三";
//    
//    NSLog(@"%@",ma.name);
//    
//    //使用KVC赋值过程
//    [ma setValue:@"李四" forKey:@"name"];
//    
//    //使用KVC取值
//    NSString *name1=[ma valueForKey:@"name"];
//    NSLog(@"%@",name1);
//    
//    woman *wom=[[woman alloc]init];
//    //将女人指定为男人的妻子
//    [ma setWomen:wom];
//    
//    //KVC:
//    
//    [ma setValue:wom forKey:@"wom"];
//    
//    
//    //通过man对象为其中的woman对象的名字赋值
//    
//    ma.women.name=@"小花";
//    
//    //KVC
//    [ma setValue:@"如花" forKeyPath:@"wom.name"];
//    
//    
//    NSLog(@"name=%@",[ma valueForKeyPath:@"wom.name"]);
    
    
    Student *s=[[Student alloc]init];
    [s setName:@"小白"];
    [s setName:@"小丽"];
    
    //KVC方法
    [s setValue:@"小花" forKey:@"name"];
    [s setValue:@"" forKey:@"sex"];
    [s setValue:@"一米二" forKey:@"height"];
    NSLog(@"height=%@",[s valueForKey:@"height"]);
    
    
    Card *c=[[Card alloc]init];
    [s setValue:c forKey:@"card"];
    //student想要访问card里面 number变量
    //这里相当于是通过路径也就是card的属性number,然后将值赋值给他
    [s setValue:@"123456" forKeyPath:@"card.number"];
    NSLog(@"%@",[s valueForKeyPath:@"card.number"]);
    
    /*
     setvlaue : forkey:  key是不能传入路径card.number
     
     setvlaue : forkeypath:  keypath是可以传入key的(也就是可以传入路径)
     
     */
    
    //直接全部赋值
    [s setValuesForKeysWithDictionary:@{@"name":@"小丽",@"age":@"18",@"hobby":@"吃辣条",@"height":@"一米二"}];
    NSLog(@"%@",[s valueForKey:@"hobby"]);
  
    
    return 0;
}

 

OC 高级内存管理

标签:

原文地址:http://www.cnblogs.com/huyibo/p/5475349.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!