objective c - Are unreachable objects safe from collection for any time after becoming unreachable? -


i'm storing obj-c objects in c++ data structure. since i'm running under garbage collection , objects reachable via c++ structure, i'm calling cfretain() root each object added structure ensure aren't collected prematurely:

- (void) dosomethingfancywithobjects:(nsarray*)array {     std::list<nsobject*> list;      (nsobject* obj in array)     {         id copyaddedtolist = [obj copy];         list.push_back(copyaddedtolist);         cfretain(copyaddedtolist); // otherwise list.back() becomes unreachable...     }      // ... //      boost_foreach(nsobject* obj, list)     {         cfrelease(obj);     } } 

is necessary this? there chance gc kick in , collect unreachable objects during method in become unreachable? can gc collect @ time, or @ specific times such end of run loop? haven't managed find relevant bit of documentation on this.

as posted in code in happens within scope of dosomethingfancywithobjects: not need cfretain/cfrelease pair because not removing objects array on stack , therefore rooted.

edit

ok, didn't read code - objects being copied.

firstly, question need copying. if modifying objects in list, why? being thrown away @ end.

secondly, have race condition. garbage collector in between list.push_back([obj copy]); , cfretain(list.back()); , object pointer in std::list dangling. should like:

nsobject* thecopy = [obj copy]; cfretain(thecopy); list.push_back(thecopy); 

Comments