12
[self.foo setBlock:^{ 
    [self doSomething]; // causes warning 
}]; 

बनामएक संदेश भेजने से एआरसी में एक सतत चक्र चेतावनी क्यों होती है, लेकिन एक संपत्ति सेट नहीं करता है?

[self.foo setBlock:^{ 
    self.bar = baz;  // does not cause warning 
}]; 

चेतावनी जा रहा है "self दृढ़ता से इस ब्लॉक में कैप्चरिंग एक चक्र को बनाए रखने के लिए नेतृत्व की संभावना है।"

दोनों एक मजबूत संदर्भ के लिए नेतृत्व नहीं करते हैं?

+0

यदि 'दूसरा सेटबार: बाज़]' का दूसरा उदाहरण बदलता है, तो क्या आपको चेतावनी मिलती है? –

+0

हां, अगर मैं उस वाक्यविन्यास के माध्यम से संपत्ति सेट करता हूं तो मैं करता हूं। – Aaron

+16

कंपाइलर बग। बाद के संस्करण में संभावित रूप से तय किया गया। – bbum

उत्तर

1

यह एक कंपाइलर बग है और आपको ऐप्पल के साथ एक बग रिपोर्ट दर्ज करनी चाहिए।

दोनों समान हैं, a.b = c[a setB: c] लिखने का एक अलग तरीका है। यदि संकलक दूसरे से अलग तरीके से संभालता है तो यह एक बग है।

+0

यह क्यों डाउनवॉट किया गया था ?? –