साथ बना रहेगा?मैनुअल एआरसी से पहले एआरसी
24
A
उत्तर
10
क्यों अतुल्यकालिक कार्य की अवधि के लिए अपने प्रतिनिधि वस्तु को एक मजबूत ivar पर असाइन न करें?
या में executeAsyncWork
- (void)executeAsyncWork
{
id localCopy = _delegate;
if (localCopy != nil) // since this method is async, the delegate might have gone
{
// do work on local copy
}
}
3
कुछ इस तरह एक स्थानीय चर है:
- (void)startAsyncWork
{
id<YourProtocol> delegate = _delegate;
dispatch_async(/* some queue */, ^{
// do work
[delegate doSomething];
}
}
ब्लॉक के रूप में लंबे समय के रूप में की जरूरत प्रतिनिधि बनी रहेगी ...
31
मैं कभी कभी जरूरत है मैन्युअल रूप से चीजों को बनाए रखने और रिलीज करने के लिए (कभी-कभी केवल डिबगिंग के लिए) और निम्न मैक्रोज़ के साथ आया:
#define AntiARCRetain(...) void *retainedThing = (__bridge_retained void *)__VA_ARGS__; retainedThing = retainedThing
#define AntiARCRelease(...) void *retainedThing = (__bridge void *) __VA_ARGS__; id unretainedThing = (__bridge_transfer id)retainedThing; unretainedThing = nil
यह __bridge_retained और __bridge_transfer का उपयोग करके चीजों को कास्ट करने के लिए काम करता है (शून्य *) जो चीजों को बनाए रखने का कारण बनता है, या बनाए रखने के बिना एक मजबूत संदर्भ बनाने के लिए।
मज़े करो, लेकिन सावधान रहें!
संबंधित मुद्दे
- 1. एआरसी
- 2. एआरसी
- 3. एआरसी
- 4. एआरसी
- 5. एआरसी
- 6. एआरसी
- 7. एआरसी
- 8. एआरसी
- 9. एआरसी
- 10. एआरसी
- 11. एआरसी
- 12. एआरसी
- 13. एआरसी
- 14. एआरसी
- 15. एआरसी
- 16. एआरसी
- 17. एआरसी
- 18. एआरसी
- 19. एआरसी
- 20. एआरसी
- 21. एआरसी
- 22. एआरसी
- 23. एआरसी
- 24. एआरसी
- 25. एआरसी
- 26. ब्लॉक, एआरसी और गैर-एआरसी
- 27. NSURLConnection एआरसी
- 28. एआरसी या नहीं एआरसी आईफोन आईओएस 5
- 29. एआरसी ऐप @property फॉर्म एआरसी स्थिर lib
- 30. स्वचालित संदर्भ गणना (एआरसी)
धन्यवाद। यह मेरा पहला विचार भी था। मैं उम्मीद कर रहा था कि एक और साफ चाल होगी ;-)। – Alexander
जीसीडी का उपयोग करें! ;-) – hypercrypt
@hypercrypt: जीसीडी परिवर्तनीय लटकने के लिए एक समाधान नहीं है, लेकिन वास्तव में एसिंक काम करने का यह एक अच्छा तरीका है। – JeremyP