NSArray的Objective C内存管理问题

Rob*_*ert 0 memory-management objective-c

我正在加载一个像这样的浮点数组:

NSArray *arr= [NSArray arrayWithObjects:
                [NSNumber numberWithFloat:1.9],
                [NSNumber numberWithFloat:1.7],
                [NSNumber numberWithFloat:1.6],
                [NSNumber numberWithFloat:1.9],nil];
Run Code Online (Sandbox Code Playgroud)

现在我知道这是正确的做法,但我对零售数量感到困惑.

  1. 每个Object都由该[NSNumber numberWithFloat:]方法创建.这给对象保留计数为1 dosnt吗? - 否则该物体将被回收

  2. arrayWithObjects:方法向每个对象发送保留消息.

这意味着每个对象的保留连续为2.当取消分配数组时,每个对象都被释放,保留计数为1.

我错过了什么?

Joh*_*ker 6

NSNumber numberWithFloat:方法未返回保留的对象.

通常,除非您正在使用alloc,copy或者new您可以假设您正在获得一个保留计数为零的对象.因此,唯一保留的是当NSArray添加了对象时.

有一个关于此类事情的好博客:http://interfacelab.com/objective-c-memory-management-for-lazy-people/