stringWithFormat vs. initWithFormat on NSString

前端 未结 2 494
深忆病人
深忆病人 2021-02-01 20:34

I am wondering what differences such as disadvantages and/or advantages there are to declaring an NSString this way:

NSString *noInit = [NSString stringWithForma         


        
2条回答
  •  走了就别回头了
    2021-02-01 20:49

    I actually came across this blog entry on memory optimizations just yesterday. In it, the author gives specific reasons why he chooses to use [[NSString alloc] initWithFormat:@"..."] instead of [NSString stringWithFormat:@"..."]. Specifically, iOS devices may not auto-release the memory pool as soon as you would prefer if you create an autorelease object.

    The former version requires that you manually release it, in a construct such as this:

    NSString *remainingStr = nil;
    if (remaining > 1)
        remainingStr = [[NSString alloc] initWithFormat:@"You have %d left to go!", remaining];
    else if (remaining == 1)
        remainingStr = [[NSString alloc] initWithString:@"You have 1 left to go!"];
    else
        remainingStr = [[NSString alloc] initWithString:@"You have them all!"];
    
    NSString *msg = [NSString stringWithFormat:@"Level complete! %@", remainingStr];
    
    [remainingStr release];
    
    [self displayMessage:msg];
    

    Here, remainingStr was only needed temporarily, and so to avoid the autorelease (which may happen MUCH later in the program), I explicitly handle the memory as I need it.

提交回复
热议问题