高性能iOS应用开发 笔记02

栈大小

每个线程都有专用的栈空间 栈可以在线程存在期间自由使用

可被递归调用的最大方法数

fun1里调用fun2,fun2调用fun3 每个方法都有自己的栈帧 每个栈帧都会消耗一定字节的内存 消耗整体的栈空间

一个方法里最多可以使用的变量个数

视图层级中可以嵌入的最大视图深度

堆大小

每个进程的所有线程共享一个堆
与通过类创建的对象相关的所有数据都存放在堆中

UITableView 数据源是NSArray 
数组中存储固定数量的内容 在用户滑动视图换入和换出

内存管理

- (NSString *)address0
{
    NSString *result = [[NSString alloc] initWithFormat:@"log:%@ %@", self.city, self.state];
    
    return result;
}
- (NSString *)address1
{
    NSString *result = [NSString stringWithFormat:@"log:%@ %@", self.city, self.state];
    
    return result;
}
- (NSString *)address2
{
    NSString *result = [[[NSString alloc] initWithFormat:@"log:%@ %@", self.city, self.state] autorelease];
    
    return result;
}

Autoreleasepool

int main(int argc, char * argv[])
{
    @autoreleasepool
    {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
@autoreleasepool {
        //cdoe
        @autoreleasepool {
            //code
        }
    }
- (void)funWithAutoreleasepool
{
    @autoreleasepool {
        NSInteger count = 10;
        
        for(NSInteger i = 0; i < count; i++)
        {
            @autoreleasepool {
                //code
            }
        }
    }
}
- (void)fun1
{
    NSThread *myThred = [[NSThread alloc] initWithTarget:self selector:@selector(myThredStart:) object:nil];
    
    [myThred start];
}
- (void)myThredStart:(id)obj
{
    @autoreleasepool {
        //code
    }
}

你可能感兴趣的:(高性能iOS应用开发 笔记02)