Objective C: Memory Allocation on stack vs. heap

前端 未结 4 1394
误落风尘
误落风尘 2020-12-08 08:28

I am somewhat confused about when things are allocated on the heap (and I need to release them) and when they are allocated on the stack (and I don\'t need to relese them).

4条回答
  •  旧巷少年郎
    2020-12-08 08:45

    Objective-C is easy in this regard.

    All Objective-C Objects Are Always Allocated On The Heap.

    Or, at the least, should be treated as if they are on the heap.

    For:

    NSString *user = @"DEFAULT";
    

    The string object is not technically in the heap, but might as well be. Namely, it is generated by the compiler and is a part of your app's binary. It doesn't need to be retained and released because the class (NSCFConstantString, IIRC) overrides retain/release/autorelease to effectively do nothing.

    As for when you do and don't release objects, you should read (and re-read) the Objective-C memory management guide.

    (There is one other exception, but it is a rather esoteric detail; blocks start on the stack and you can Block_copy() them to the heap. Blocks also happen to be Objective-C objects, but that is rarely exposed in use.)

提交回复
热议问题