2012-05-07 16 views
8
#import <UIKit/UIKit.h> 
#import "UCMapviewController.h" 
#import "UCMenuviewController.h" 
#import "UCOverviewController.h" 

@interface UCRootViewController : UIViewController 

@property (weak, nonatomic) UCMapviewController *mapviewController; 
@property (weak, nonatomic) UCMenuviewController *menuviewController; 
@property (weak, nonatomic) UCOverviewController *overviewController; 

यह मेरे UCRootViewController की घोषणा है जो इन उप-दृश्य नियंत्रकों को प्रबंधित करना चाहिए। जब वह एक नियंत्रक को दिखाया जाना चाहिए या नहीं, तो वह बाद में अपने प्रतिनिधि बनने के लिए भी बन जाएगा।मेरे उप-दृश्य नियंत्रकों के लिए कमजोर या मजबूत गुण?

रूट ViewController UIAppDelegate में मजबूत है और हर समय सक्रिय रहेगा।

तो क्या यह सब-व्यू कंट्रोलर कमजोर बनाने के लिए सही है? मैं 100% निश्चित नहीं हूं, लेकिन जहां तक ​​मैं समझता हूं कि कमजोर पॉइंटर्स को तब तक हटा दिया जाता है जब उनके लिए कोई मजबूत संकेतक नहीं होता है। तो चूंकि जड़ मजबूत है, उन्हें कमजोर बनाने के लिए सही है, है ना?

#import <UIKit/UIKit.h> 

@class UCRootViewController; 
@interface UCOverviewController : UIViewController 

@property (weak, nonatomic) UCRootViewController *rootviewController; 

यह मेरे उप-दृश्य नियंत्रकों में से एक का शीर्षलेख है। उनके पास (बाद में) प्रतिनिधि रूटव्यू नियंत्रक के लिए एक कमजोर सूचक है। क्या प्रतिनिधि प्रतिनिधि विधियों को कॉल करने के लिए @class UCRootviewController घोषित करना पर्याप्त है? क्या मुझे इसकी भी आवश्यकता है?

धन्यवाद

संपादित करें: मैं बस a nice article about ViewControllers और पारित होने पढ़ें:

हमेशा उच्च गुणवत्ता वाले दृश्य नियंत्रक कंटेनर या + का उपयोग [UIViewController presentModalViewController: एनिमेटेड:] अपने आवेदन में दृश्य नियंत्रकों प्रदर्शित करने के लिए । यदि आपको किसी संदर्भ नियंत्रक को संदर्भ को संदर्भ रखने की आवश्यकता है, तो कमजोर संदर्भ का उपयोग करें, सिवाय इसके कि यदि आप वास्तव में कैशिंग उद्देश्यों के लिए ज़िंदा रहना चाहते हैं। ऐसे मामलों में, कम-स्मृति स्थितियों का सही ढंग से जवाब देना सुनिश्चित करें।

यह एक कमजोर संदर्भ का उपयोग करता है, इस पर आपकी राय क्या है?

+2

यह कहता है कि उपयोग कंटेनरों का उपयोग करते समय कमजोर संदर्भों का उपयोग करें जो स्वयं आपके व्यू कंट्रोलर के लिए दृढ़ता से उपयोग करते हैं। जैसा कि मैंने अपने उत्तर में लिखा था, जब आप उदाहरण के लिए एक नेविगेशन नियंत्रक का उपयोग करते हैं तो आप कमजोर संदर्भों का उपयोग करके ठीक हैं। लेकिन जब आप नियंत्रकों को चारों ओर रखना चाहते हैं क्योंकि आपने अपने वर्तमान वीसी के दृश्य में सबव्यूव्यू के रूप में अपने विचार जोड़े हैं तो आपको मजबूत पॉइंटर्स का उपयोग करने की आवश्यकता है अन्यथा उन्हें समय-समय पर हटा दिया जाएगा। –

+0

ठीक है आपको बहुत धन्यवाद – MJB

उत्तर

9

मजबूत सूचक केवल आपके रूट व्यू कंट्रोलर से जुड़ता है। इसका मतलब यह नहीं है कि यह आपके रूट व्यू कंट्रोलर के अंदर आपके अन्य दृश्य नियंत्रकों को स्वचालित रूप से मजबूत बिंदु देगा।

आपको यह गुण सुनिश्चित करने के लिए उन गुणों को मजबूत करना चाहिए, यह सुनिश्चित करने के लिए कि आपका अन्य दृश्य नियंत्रक किसी भी तरह से उन्हें हटा नहीं पाएंगे।

यदि आप उन्हें नेविगेशन स्टैक में दबाते हैं तो यह ठीक होगा, क्योंकि नेविगेशन स्टैक स्वचालित रूप से उनको अंक मजबूत करता है। लेकिन अगर आप अपने रूट व्यू कंट्रोलर में सबव्यूव के रूप में अपने विचार जोड़ने जा रहे हैं, तो आप यह सुनिश्चित करना चाहते हैं कि वे गुण मजबूत हैं।

ऑब्जेक्ट्स को तब तक हटा दिया जाता है जब उनके लिए कोई मजबूत सूचक नहीं होता है। और क्योंकि आपके अन्य दृश्य नियंत्रकों के लिए कोई मजबूत संकेतक नहीं हैं, वे हटाए जाएंगे।

+0

मैंने सोचा कि इसका मतलब यह है कि जब तक कोई दृढ़ता से इंगित वस्तुएं उन्हें इंगित करती हैं। इसलिए चूंकि रूटव्यूसी मेरा अपर्याप्त मजबूत है, इसलिए इसे हटाया नहीं जाएगा, और जब तक वह दूसरों को इंगित करता है ठीक है। लेकिन मैंने स्पष्ट रूप से इसे गलत समझा – MJB

2

स्ट्रॉन्ग बरकरार रखने के बराबर है सिवाय इसके कि एआरसी आपके लिए रिलीज का प्रबंधन करेगा। कमजोर चक्र बनाए रखने से बचने के लिए है - जहां माता-पिता बच्चे को बनाए रखते हैं और इसके विपरीत।

__weak एक संदर्भ निर्दिष्ट करता है जो संदर्भित वस्तु को जीवित नहीं रखता है। ऑब्जेक्ट के लिए कोई मजबूत संदर्भ नहीं होने पर एक कमजोर संदर्भ शून्य पर सेट होता है।

यहाँ एक कड़ी है: Weak and strong property setter attributes in Objective-C

यह देखते हुए कि आप इन दृश्य नियंत्रकों के आसपास रखना चाहते हैं, सबसे अच्छा विकल्प एक मजबूत संदर्भ है!सुनिश्चित करें कि उन्हें आपकी आवश्यकता से पहले रिलीज़ नहीं किया गया है!

संबंधित मुद्दे