2013-04-18 24 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.

İlgili konular