Iphone在prefix.pch中编写代码

时间:2014-03-18 05:53:53

标签: ios iphone objective-c

我想在prefix.pch中为chatboost编写代码 目前我已经创建了一个全局文件名,我提到了所有应用程序ID和签名

目前我的.pch文件看起来像这样

#import <Availability.h>


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

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

但我不知道如何在prefix.pch中编写代码

我的global.h文件看起来像这样

#import <Foundation/Foundation.h>

@interface Global : NSObject
#define APP_ID @"dfgdf";
#define APP_SIGNATURE @"fdgfd";
@end

4 个答案:

答案 0 :(得分:2)

预编译的头文件用于一个目的:使编译更快。它被编译并存储在缓存中,并在编译期间自动包含在每个源文件中。就像每个源文件一样,

#import "Prefix.h"

这对于项目范围的#defines来说非常方便。 (仅供参考,#define是一种代码味道)

Xcode引号:如果前缀标题或其包含的任何文件的内容很少更改,则预编译前缀标头将最有效。如果前缀标题的内容或其包含的任何文件经常更改,则可能会对整体构建时间产生负面影响。

更明确的解释是here

在.pch中#import的源文件头时请记住这一点。我建议你探索编写代码的其他方法,而不是选择.pch文件。

您可以将Prefix.h用于常量和实用程序源文件的#import。同样为了方便调试:

#ifndef DEBUG
#define NSLog(x,...)
#endif

我看到你要声明常量字符串以在项目范围内使用。创建一个新的头文件“Constants.h”(或“Global.h”,你喜欢它)并在这里写下你所有的全局常量(通常是宏和&amp; typedef枚举)。但是,要使用extern声明常量字符串,您也需要实现文件。

在“Constants.h”中,

extern NSString *const app_ID;

在“Constants.m”中,

NSString *const app_ID=@"dfgdf";

希望有所帮助。

答案 1 :(得分:0)

您可以使用#define

编写代码
#import <Availability.h>


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

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

#define SHOW_CHARTBOOST   [[Chartboost sharedChartboost] showInterstitial];

并使用SHOW_CHARTBOOST

在任何其他类中调用它

这不是一个好习惯,你应该使用全局/常量类来编写这样的东西,并且主要用于某些常量,而不是那里的长方法。

答案 2 :(得分:0)

我建议您直接将宏写入.pch文件。无需为定义宏创建单独的类。写如下。

#import <Availability.h>


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

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

#define APP_ID @"dfgdf";
#define APP_SIGNATURE @"fdgfd";

OR

如果您希望将您的id和签名作为类的成员,那么创建一个单例类。将其定义为头文件中的属性,作为readonly属性,并在sharedObject方法中定义值。 写如下

Global.h

#import <Foundation/Foundation.h>

@interface Global : NSObject

@property(nonatomic, strong, readonly) NSString *appId;
@property(nonatomic, strong, readonly) NSString *appSignature;

+(instancetype)sharedInstance;

@end

Global.m

#import "Global.h"

@interface Global ()

@property(nonatomic, strong) NSString *appId;
@property(nonatomic, strong) NSString *appSignature;

@end

@implementation Global

+(instancetype)sharedInstance
{
   static Global *sharedInstance;

   static dispatch_once_t onceToken;
   dispatch_once(&onceToken, ^{
       sharedInstance = [Global new];
       sharedInstance.appId = @"dfgdf";
       sharedInstance.appSignature = @"fdgfd";
   });

   return sharedInstance;
}

@end

OR

如果要在没有类的情况下访问该值,请按如下所示创建类并将其导入.pch文件。

global.h

#import <Foundation/Foundation.h>

@interface Global : NSObject

extern NSString *const appId;
extern NSString *const appSignature;

@end

global.m

#import "Global.h"

@implementation Global

 NSString *const appId = @"dfgdf";
 NSString *const appSignature = @"fdgfd";
@end

我建议使用第一种方法。

答案 3 :(得分:-1)

对应用程序级变量使用extern key work,如下所示

在.h档案中     extern NSString * yourVariable;

在.m文件中 NSString * yourVariable = @&#34;&#34 ;;

您可以在任何使用变量名称的地方访问此变量,只需输入此.h文件。