01内存管理-概述

内存管理

  • 内存消耗
  • 内存管理模型
  • 语言架构
  • 减少内存使用的实践

1 内存消耗

  • 栈大小

每一个线程都有专有的栈空间,栈内存在线程存在期间自由使用。

每一个函数都有其自己的栈帧,所有的变量都会载入到方法的栈帧中,并且消耗一定的内存。

(函数的递归调用自己说白了就是栈内存的溢出)

  • 堆大小

每个进程的所有线程共享一个堆,一个设备的可以使用的堆大小远远小于内存的RAM,最多不超过2分之一。

通过类创建的对象都存放在堆当中

创建一个Person 类

@interface Person : NSObject


/** */
@property (nonatomic,strong)NSString *name;

/** */
@property (nonatomic,assign)NSInteger age;


@end

在另外一个类上面

// 这里面创建的Person 就是
- (Person *)createPersonWithName:(NSString *)name age:(NSInteger)age
{
    // 通过类创建的s所有的数据都存放在堆中
    Person  *p = [Person new];
    p.age = age;
    p.name = name;
    return p;
    
}

// 函数中将堆内存中copy到栈中
- (void)totalAge{
    
    NSMutableArray * pArr = [NSMutableArray array];
    // 0 for  循环 创建 10个人
    for (int i = 0; i < 10; i ++) {
        NSString *name = [NSString stringWithFormat:@"人物--%d",i];
        [pArr addObject:[self createPersonWithName:name age:(NSInteger)i]];
    }
    
    // 1 计算着10个人的年纪之和
    // totalAge 是开辟栈内存的
    NSInteger totalAge = 0;
    for (Person *p in pArr) {
        
        // MARK 在使用跑p的 age的时候,必须要先复制到栈上面,才能进行加到totalAge 上
        totalAge += p.age;
    }

}

猜你喜欢

转载自blog.csdn.net/github_36850997/article/details/84783844
今日推荐