Problems understanding ARC and zombies

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

  1. ramy1989 macrumors newbie

    Nov 7, 2012
    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:
        __unsafe_unretained NSString* str;
            str= @"Hello";
    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. gnasher729 macrumors P6


    Nov 25, 2005
    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. Madd the Sane macrumors 6502a

    Madd the Sane

    Nov 8, 2010
    To get what you're looking for, use
    str = [NSString stringWithString:@"Hello"]

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


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

Share This Page