2011-04-08 15 views
6

अरे दोस्तों, मैं पूछना चाहते है, क्या sharedInstance वास्तव में है? मेरा मतलब है कि उपयोग क्या है?प्रश्न SharedInstance के बारे में

वर्तमान में मैं 2 अलग फ़ाइलों के बीच संवाद स्थापित करने में कुछ समस्या आ रही है।

यहाँ मेरे सवाल है: मैं 1 फ़ाइल कॉल आह/एम तथा अन्य फ़ाइल कॉल Bh/Bm आह .... Bh के डेटा के कुछ का उपयोग करने की आवश्यकता है, तो वहाँ किसी भी संभव तरीके से मैं क्या हासिल कर सकता है मुझे चाहिए? बस आश्चर्य नहीं कि यह "SharedInstance" मेरी समस्या का समाधान करने में सक्षम है?

जबाब लिए खोज रहे हैं :)

उत्तर

11

sharedInstance कई तरीके के लिए इस्तेमाल किया जा सकता है।

उदाहरण के लिए आप एक स्थिर संदर्भ से एक वस्तु का उपयोग कर सकते हैं। असल में यह सिंगलटन-पैटर्न का समर्थन करने के लिए अधिकांश तरीकों का उपयोग किया जाता है। इसका मतलब है कि कक्षा में से केवल एक वस्तु है, बस एक उदाहरण बिल्कुल अपने पूरे प्रोग्राम कोड में प्रयोग किया जाता है।

इंटरफ़ेस की तरह लग सकता है:

@interface ARViewController 
{ 
} 
@property (nonatomic, retain) NSString *ARName; 

+ (ARViewController *) sharedInstance; 

कार्यान्वयन ARViewController:

#import "ARViewController.h" 

@implementation CustomARFunction.m 

- (void) yourMethod 
{ 
    [ARViewController sharedInstance].ARName = @"New Name"; 
} 
+0

मैं समझता हूँ :( – Birdkingz

+0

खैर नहीं है, हमें कुछ अधिक विस्तृत जानकारी प्रदान करते हैं जहां समस्या है और आप बिल्कुल समझ में नहीं आता क्या :) – Lepidopteron

+0

ठीक कृपया, मैं 2 फ़ाइलें है। एच/एमएम - कस्टमरफंक्शन। एच/एमएम ARViewController.h के अंदर, मेरे पास एक स्ट्रिंग वेरिएबल कॉल ARName है। मैं जो चाहता हूं वह वास्तव में CustomARFunction.m के अंदर है, मुझे ARViewController.h में ARName को संदर्भित करने की आवश्यकता है और इसमें कुछ बदलाव करें। मतलब, अगर मैं CustomARFunction.m का उपयोग करके एआरएनएएम बदलता हूं, तो ARViewController पर ARName भी बदल जाएगा। – Birdkingz

3

एक sharedInstance अक्सर कार्यान्वित किया जाता है:

@implementation ARViewController 
static id _instance 
@synthesize ARName; 
... 
- (id) init 
{ 
    if (_instance == nil) 
    { 
     _instance = [[super allocWithZone:nil] init]; 
    } 
    return _instance; 
} 

+ (ARViewController *) sharedInstance 
{ 
    if (!_instance) 
    { 
     return [[ARViewController alloc] init]; 
    } 
    return _instance; 
} 

और यह तक पहुँचने के लिए, वर्ग CustomARFunction में निम्न का उपयोग singleton pattern के साथ। [UIApplication sharedApplication] की तरह -> केवल एक ही एप्लिकेशन है जिसे आप इस सिंगलटन के माध्यम से एक्सेस करते हैं।

विचार यह है कि कक्षा का एक उदाहरण होना चाहिए जिसे क्लास विधि को कॉल करके एक्सेस किया जा सकता है, उद्देश्य-सी आमतौर पर साझा किए गए XXXXX में।

अपनी समस्या को हल करने के लिए आप वास्तव में एक मॉडल वर्ग के एक सिंगलटन को लागू करने और करने के लिए और एक मौजूदा उदाहरण है, जिसमें एक स्थिर विधि के साथ पहुँचा जा सकता है से लिख सकते हैं और पहुंच तारीख सकता है, यह sharedModel फोन करते हैं।

अगले कदम के अपने मॉडल पर सुधार करने के लिए और विचारों को अद्यतन करने KVO होगा: कुंजी मान अवलोकन। आप अपने मॉडल में किए गए परिवर्तनों को देखने के लिए नियंत्रक को अपने दृश्य में एक पर्यवेक्षक जोड़ते हैं। यदि ऐसा परिवर्तन होता है तो आपका व्यू कंट्रोलर सूचित किया जाता है और फिर आप दृश्य को अपडेट कर सकते हैं।

आप Apple's documentation में केवीओ के बारे में और mindsizzlers पर एक छोटे और आसान ट्यूटोरियल के लिए और अधिक पढ़ सकते हैं।

1

इंटरफ़ेस

@interface CouponSynchronizer : NSObject 

+ (CouponSynchronizer *) sharedSynchronizer; 

@end 

कार्यान्वयन

@implementation CouponSynchronizer 

static CouponSynchronizer *sharedSynchronizer = nil; 

+ (CouponSynchronizer *)sharedSynchronizer 
{ 
    @synchronized(self) { 
     if (sharedSynchronizer == nil) { 
      sharedSynchronizer = [[self alloc] init]; 
     } 
    } 
    return sharedSynchronizer; 
} 

@end 
7

साझा उदाहरण एक प्रक्रिया है जिसके द्वारा आप इस परियोजना में कहीं भी एक वर्ग का एक ही उदाहरण या वस्तु का उपयोग कर सकते है। इसके पीछे मुख्य विचार एक ही वस्तु को प्रत्येक बार एक विधि कहा जाता है ताकि उदाहरण में संग्रहीत मूल्य/गुणों को एप्लिकेशन में कहीं भी इस्तेमाल किया जा सके।

2 सरल प्रक्रिया में किया जा सकता प्रकार है: -

1) एक स्थैतिक चर का उपयोग केवल एक बार initialised

@implementation SharedInstanceClass 

static SharedInstanceClass *sharedInstance = nil; 

+ (id)sharedInstanceMethod 
{ 
    @synchronized(self) { 
     if (sharedInstance == nil) { 
      sharedInstance = [SharedInstanceClass new]; 
     } 
    } 
    return sharedInstance; 
} 

@end 

2) GCD के उपयोग: -

+ (id)sharedInstance{ 
    static dispatch_once_t onceToken; 
    static SharedInstanceClass *sharedInstance = nil; 
    dispatch_once(&onceToken, ^{ 
     sharedInstance = [SharedInstanceClass new]; 
    }); 
    return sharedInstance; 
} 

इन को इस प्रकार कहा जाना चाहिए: -

SharedInstanceClass *instance = [SharedInstanceClass sharedInstance]; 

इस प्रकार हर बार एक ही उदाहरण समारोह से वापस कर दिया जाएगा और गुणों पर सेट मूल्यों को बनाए रखा जाएगा और आवेदन में कहीं भी इस्तेमाल किया जा सकता है। ARViewController -

सादर,

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