Why is there no autorelease pool when I do performSelectorInBackground:?

前端 未结 2 800
小鲜肉
小鲜肉 2020-12-30 15:39

I am calling a method that goes in a background thread:

[self performSelectorInBackground:@selector(loadViewControllerWithIndex:) withObject:[NSNumber number         


        
2条回答
  •  无人及你
    2020-12-30 16:11

    I agree that most likely the reason for this is because the leaked object (an NSNumber), is a parameter passed in from outside the thread. Hence, this variable belongs to the calling thread (and its autorelease pool)

    The calling thread should use NSAutoreleasePool and I suggest that you add a retain instruction to your parameter as:

    - (void) loadViewControllerWithIndex:(NSNumber *)indexNumberObj {
        NSAutoreleasePool *arPool = [[NSAutoreleasePool alloc] init];
        [indexNumberObj retain];
    
        ....
    
        [arPool release];
      }
    

提交回复
热议问题