240 发简信
IP属地:上海
  • 大哥,那句话意识是1个APP至少2个人审核。苹果的意思是审核严谨,任务重。

    揭秘苹果App Store审核团队,知己知彼好过审

    苹果说到审核团队,很多人就冒火,他们拒绝应用的理由花式上百,让人抓狂却无可奈何!他们神秘低调,除了申诉渠道,不和外界做任何的沟通。 他们是群什么样的人呢?又是如何评判App的...

  • 而调用[obj autoreplease]或者@autoreleasepool{}都会发生push操作,前者将obj压栈,后者将POOL_SENTINEL标记压栈。

    各个线程 Autorelease 对象的内存管理

    最近和 bestswifter 、kuailejim 搞了一套模拟面试,然后不管是应届生还是工作两三年的高级工程师都对下面这几个问题比较懵逼,可能是开发中用到的不多,在这里浅...

  • 对第三个问题,我觉得说的不是很清楚。而且很多博客对线程和autoreleasepool的关系都描述成"一个线程对应一个autoreleasepool"也不恰当,对autoreleasepool和AutoreleasepoolPage关系描述也不恰当。
    实际一个线程对应一个autoreleasepool堆栈,而这个堆栈则是通过AutoreleasepoolPage的双向链表(数据结构)进行实现的。所以对于第三个问题“子线程对Autorelease对象如何处理”,子线程中在第一次push的时候创建AutoreleasepoolPage双链表,也就是autoreleasepool堆栈,然后所有的autoreleasepool后者说Autorelease对象都被压入到栈里,只是每个autoreleasepool之间都有一个POOL_SENTINEL标记界限(栈层次)。而调用[obj autoreplease]或者@autoreleasepool{}都会发生push操作。

    各个线程 Autorelease 对象的内存管理

    最近和 bestswifter 、kuailejim 搞了一套模拟面试,然后不管是应届生还是工作两三年的高级工程师都对下面这几个问题比较懵逼,可能是开发中用到的不多,在这里浅...

  • ```
    __weak id ref = nil;

    @Implementation ViewController

    - (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSString *str;
    @autoreleasepool {
    {
    NSString *str = [[NSString alloc] initWithFormat:@"aaa"];
    ref = str;
    }
    NSLog(@"-.ref = %@(%p)", ref, ref);
    NSString *str = [@[@"1", @"2", @"3", @"4"] componentsJoinedByString:@"|"];
    // ref = str;
    NSLog(@"0.ref = %@(%p)", ref, ref);
    }
    NSLog(@"1.ref = %@(%p)", ref, ref);
    }
    - (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"2.ref = %@(%p)", ref, ref);
    }
    - (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"3.ref = %@(%p)", ref, ref);
    }

    @EnD
    ```
    这面这段代码的输出结果:
    ```
    2017-09-29 14:37:19.073666+0800 SJAdditionsTest[1820:1188820] -.ref = aaa(0xa000000006161613)
    2017-09-29 14:37:19.073804+0800 SJAdditionsTest[1820:1188820] 0.ref = aaa(0xa000000006161613)
    2017-09-29 14:37:19.073898+0800 SJAdditionsTest[1820:1188820] 1.ref = aaa(0xa000000006161613)
    2017-09-29 14:37:19.074108+0800 SJAdditionsTest[1820:1188820] 2.ref = aaa(0xa000000006161613)
    2017-09-29 14:37:19.085965+0800 SJAdditionsTest[1820:1188820] 3.ref = aaa(0xa000000006161613)
    ```
    和预期的完全不一样,大神能解释下吗?

    各个线程 Autorelease 对象的内存管理

    最近和 bestswifter 、kuailejim 搞了一套模拟面试,然后不管是应届生还是工作两三年的高级工程师都对下面这几个问题比较懵逼,可能是开发中用到的不多,在这里浅...