高性能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
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,341评论 11 349
  • iPhone和iPad在内存方面是资源紧缺的设备,一个app如果超过了最大使用限制它可能被系统干掉的,因此实现一个...
    当红辣椒炒肉阅读 747评论 1 10
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,909评论 25 708
  • java 接口的意义-百度 规范、扩展、回调 抽象类的意义-乐视 为其子类提供一个公共的类型封装子类中得重复内容定...
    交流电1582阅读 2,262评论 0 11
  • 今夜下起了雨,一场很大的雨,外面电闪雷鸣,只可惜,这个寝室里只有我一个人,我害怕的赶紧关上了窗户,关上了门,盖上了被子。
    叫我很可爱阅读 196评论 0 0