2012-03-05 17 views
11

मैं इस चेतावनी हो रही है जारी किया जाएगास्वचालित संदर्भ गणना समस्या: असुरक्षित ऑब्जेक्ट को unsafe_unretained चर पर असाइन करना; वस्तु के बाद काम

"स्वचालित संदर्भ गिनती मुद्दा: unsafe_unretained चर के लिए बनाए रखा वस्तु नियत; वस्तु असाइनमेंट के बाद जारी किया जाएगा"

यहाँ कोड है

@interface myObject : NSObject 
{ 
} 

@property (assign) id progressEnergy; 

@end 

मीटर

@implementation myObject 

@synthesize progressEnergy; 

-(id)init 
{ 
    if ((self = [super init])) 
    { 
     progressEnergy = [[progress alloc] init]; //warning appear on this line 
    } 

    return self; 
} 

@end 

मैं पहले से ही

@property (assign) progress* progressEnergy; 

लेकिन कोई किस्मत

आप कृपया मुझे यह पता लगाने की क्या गलत है मदद कर सकते हैं की कोशिश की?

उत्तर

27

बदलें

@property (assign) progress* progressEnergy; 

को
@property (strong) progress* progressEnergy; 

तो अपने myObjectprogress वस्तु बरकरार रखती है।

+0

धन्यवाद। वह समस्या थी :) – zeroonnet

9

वैसे यह आपको चेतावनी दे रहा है कि आप एक मूल्य निर्दिष्ट कर रहे हैं जो संलग्न क्षेत्र के अंत में रिलीज होने वाला है, जो अगली पंक्ति होती है। (हालांकि जरूरी नहीं कि) एक झूलने सूचक होने के लिए

-(id)init 
{ 
    if ((self = [super init])) 
    { 
     progressEnergy = [[progress alloc] init]; 
     [progressEnergy release]; ///< Release progressEnergy since we've hit the end of the scope we created it in 
    } 

    return self; 
} 

तो अपने progressEnergy अब अत्यंत संभावना है: तो यह है कि आपके init तरह के बाद एआरसी अपना जादू में कहते हैं दिखेगा।

बदलें strong करने के लिए assign से संपत्ति की परिभाषा:

-(id)init 
{ 
    if ((self = [super init])) 
    { 
     progressEnergy = [[progress alloc] init]; 
     [progressEnergy retain]; ///< Since it's a strong property 
     [progressEnergy release]; ///< Release progressEnergy since we've hit the end of the scope we created it in 
    } 

    return self; 
} 

वास्तविक वास्तव में, यह objc_storeStrong बजाय कॉल बुलाने की:

@property (strong) progress* progressEnergy; 

उस मामले में, अपने init विधि की तरह दिखाई देगा retain जैसा मैंने दिखाया है, लेकिन अनिवार्य रूप से यह इस मामले में retain तक उबाल जाता है।

+0

धन्यवाद। वह समस्या थी :) – zeroonnet