Odpowiedz na ten temat
Pokaż wyniki od 1 do 5 z 5
  1. uho
    Mężczyzna uho jest offline
    Avatar uho
    Dołączył
    Mar 2008
    Skąd
    Łuków, PL
    Postów
    135

    Cytuj | #1

    Witam

    Czy w ObjC można stworzyć obiekt który będzie dostępny dla innych obiektów, tak jakby globalnie, czy zawsze trzeba przekazywać jego pointer innym obiektom, aby mogły korzystać z jego zmiennych i metod instancyjnych?
    Ostatnio edytowane przez wojtkow ; 03.07.2011 o 13:57 Powód: ortografia!!!
    Telefon: iPhone 4S 16GB
    Odtwarzacz: iPod Nano 4G
    Tablet: iPad2 3G 16G
    WWW: http://www.tomaszbuziak.com


  2. Avatar Roberto
    Dołączył
    Feb 2007
    Skąd
    Wrocław
    Postów
    11,859

    Cytuj | #2

    Można. Hasło: singleton
    Komputer: MacBook Pro 13,3" 2,26GHz (Lion 10.7.3)
    Telefon: iPhone 4S
    Tablet: iPad 2 3G
    dlaczego nie korzystasz z opcji szukaj?
    http://ifiboughtyourappalreadycaniup...acappstore.com


  3. Dołączył
    Feb 2010
    Postów
    222

    Cytuj | #3

    Kod:
    static KKAchievements *instanceOfKKAchievements;
    
    @implementation KKAchievements
    
    +(id) alloc
    {
    	@synchronized(self)     
    	{
    		NSAssert(instanceOfKKAchievements == nil, @"Attempted to allocate a second instance of the singleton: KKAchievements");
    		instanceOfKKAchievements = [[super alloc] retain];
    		return instanceOfKKAchievements;
    	}
    	
    	// to avoid compiler warning
    	return nil;
    }
    
    +(KKAchievements*) sharedKKAchievements
    {
    	@synchronized(self)
    	{
    		if (instanceOfKKAchievements == nil)
    		{
    			[[KKAchievements alloc] init];
    			
    			//[[GCCache activeCache] reset];
    		}
    		
    		return instanceOfKKAchievements;
    	}
    	
    	// to avoid compiler warning
    	return nil;
    }
    Kawałek kodu jednej z moich klas (singleton zarządzający achievementami w grze). W klasie tworzysz jedną zmienną statyczną, która przechowuje wskaźnik do singletona. Zasada działania singletona jest taka, że tworzy on tylko jedną instancję.
    Później w kodzie możesz się do niego odwołać:
    Kod:
    KKAchievements* achievements = [KKAchievements sharedKKAchievements];
    Moje aplikacje w AppStore:
    Blicks.

  4. uho
    Mężczyzna uho jest offline
    Avatar uho
    Dołączył
    Mar 2008
    Skąd
    Łuków, PL
    Postów
    135

    Cytuj | #4

    Dzieki, znalazłem już przykład takiej klasy, właśnie ją implementuje w swoim projekcie.
    Telefon: iPhone 4S 16GB
    Odtwarzacz: iPod Nano 4G
    Tablet: iPad2 3G 16G
    WWW: http://www.tomaszbuziak.com

  5. Avatar wezuwiusz
    Dołączył
    Feb 2008
    Skąd
    Dublin, Katowice
    Postów
    783

    Cytuj | #5

    maly update do powyzszej metody. jest ona oczywiscie poprawna, ale zalecane obecnie jest wykorzystanie Grand Central Dispatch (GCD) i funkcja w/g 'nowych wytycznych' powinna wygladac tak:

    Kod:
    + (id) sharedInstance {
    	
    	static MyClass *instance;
    	static dispatch_once_t onceToken;
    	dispatch_once(&onceToken, ^{
    		instance = [[MyClass alloc] init];
    	});
    	
    	return instance;
    	
    }
    Komputer:  iMac 27"  iPhone4  iPad tv² +
    WWW: http://www.tridrops.com
    ____________________________/"'\,,, WezUwiUsz_
    Moja strona na FB
    Moje aplikacje: Easy Cash, Dock Clock, Flat Cube, Crazy Emoji

Odpowiedz na ten temat