2013-04-18 15 views
12

Tüm projeden erişilebilen statik değerler içeren bir sınıf oluşturmak istiyorum.Objective-C'de tanımlanmış statik sabit değerlere sahip sınıf

yalancı kod:

class Constants: 
    constant String API_URL : "http://api.service.com" 
    constant Integer SOME_VALUE : 7 

nasıl Objective-C ile yapabilirsiniz? Eğer statik özel değişkenler ve statik alıcılar kullanabilirsiniz daha sınıf oluşturmak için istemiyorsanız

cevap

9

Sen preprocessors kullanarak yapabileceğini: basit olurdu

#define API_URL @"http://api.service.com" 
#define SOME_VALUE (7) 

Erişme tanımlar: [object do:API_URL];

Yoksa

NSString * const apiURL = @"http://api.service.com"; 
NSNumber * const someValue = @7; 

Erişme consts erişme gibi olurdu sabitleri kullanabilirsiniz değişkenler, Yani dize sadece basit bir çağrı olacaktı. Sorunuza someValue.intValue

+0

Bir stil meselesi olarak (ve hataların sürünmesini önlemek için) bu #defines'in gerçekten olması gerektiği gibi bir şey var, örneğin, # #file SOME_VALUE (7) '. Ayrıca, bu uygulamada gömülü olmayan uygulamalar için de uygulamadan vazgeçtim ve statik değişkenlerin bellek yükü gerçekten iOS/OS X için büyük bir sorun değil. – sapi

+0

İyi puanlar. Sadece onun için bazı seçenekler atmak istedim. düzenlendi. –

+1

Gelecekte bunun karşısına çıkan herkes için. Sabitler kesinlikle tercih edilen yöntemdir. Sabitler, derleyicinin sizin için bazı optimizasyonlar yapmasına izin verirken, tanımlamanızın yalnızca tamamen otomatik kod tarafından geliştirilmesini tanımlar. –

0

Tüm gerekli sabitleri Here is a sample

ile Singleton oluşturabilirsiniz.

@interface 

+(NSString*) getValue; 

@end 


@implementation 

static NSString *_value = @"...."; 

+(NSString*) getValue { 
    return _value; 
} 

@end 
+0

Init sınıfına ihtiyacım yok - Sadece özelliklere statik bir şekilde erişmek istiyorum. – hsz

+0

Güncellememe bakın –

13

Cevap extern anahtar kelimedir: hoşuna erişmek gerekiyordu böylece NSNumber öncülleri için bir nesne sarıcı. Bir örnek kullanarak size açıklayacağım. nesnel c sınıflar projenizi ekleyin ve onları Ortak isim, Şimdi Common.h

 @interface Common : NSObject 

    extern NSString *SiteApiURL; 

    @end 

içinde yapmanız gerekenler extern anahtar kelimeyi kullanarak NSString Sınıf örneğini tanımlanan sonra Common.m sınıfına geçiş ve başlatmak NSString (SiteApiURL) değeri

 #import "Common.h" 

    @implementation Common 

    NSString *SiteApiURL = @"http://api.service.com"; 

    @end 

İthalat proje Prefix.pch içinde Common.h sınıfı o şimdi kullanabilirsiniz, tüm yapılan bu

#import <Availability.h> 

    #ifndef __IPHONE_3_0 
    #warning "This project uses features only available in iOS SDK 3.0 and later." 
    #endif 

    #ifdef __OBJC__ 
     #import <UIKit/UIKit.h> 
     #import <Foundation/Foundation.h> 
     #import "Common.h" 
    #endif 

gibi dosya Tüm projenin herhangi bir yerinde "SiteApiURL" ifadesini kullanın ve herhangi bir sınıfa herhangi bir yer vermemeniz gerekir, yani bu değişkeni doğrudan projenin herhangi bir yerinde kullanabilirsiniz.