Problems understanding ARC and zombies

Discussion in 'Mac Programming' started by ramy1989, Dec 6, 2012.

  1. macrumors newbie

    Joined:
    Nov 7, 2012
    #1
    I started learning Cocoa when there still was the manual counting, but after few time I got the new OS update and ARC was available.
    I know how to user retain-release if I don't use ARC, but the problem comes with ARC enabled.I always used strong references and everything was fine, never had leaks nor dangling pointers.
    But I want to understand better how it works.

    Now I am running a project for debugging, with zombies enabled.I tried do do this:
    Code:
        __unsafe_unretained NSString* str;
        @autoreleasepool
        {
            str= @"Hello";
        }
        NSLog(@"%@",str);
    
    I would except that str is zombie because @"Hello" should be autoreleased, and I print it outside the pool.But instead it just prints "Hello" and all goes fine.Why?

    Also a tip, should I start making some projects with manual counting to understand how ARC works?
     
  2. macrumors G5

    gnasher729

    Joined:
    Nov 25, 2005
    #2
    Strings like @"Hello" are _never_ released and have never been released. Before ARC, their retain count returned some meaningless value, and retain / release / autorelease never had any effect on them.
     
  3. macrumors 6502

    Madd the Sane

    Joined:
    Nov 8, 2010
    Location:
    Utah
    #3
    To get what you're looking for, use
    Code:
    str = [NSString stringWithString:@"Hello"]
    .

    I think NSString has a stringWithString method, but I can't verify it right now.
     
  4. macrumors 68030

    Catfish_Man

    Joined:
    Sep 13, 2001
    Location:
    Portland, OR
    #4
    +stringWithString: will short-circuit to just using the argument directly in this case. -mutableCopy should get what he wants.
     

Share This Page