在同一个UIViewController中多次使用appDelegate

时间:2012-12-11 10:55:34

标签: iphone objective-c pointers nsinteger appdelegate

我是Objective-C和cocoa的新手。

在我的UIViewController中,我需要以不同的方法多次访问AppDelegate

一个。正在调用每种方法:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

消耗更多性能?

B中。我试图在UIViewController中创建一个全局参数:

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

@interface Login_ViewController : UIViewController<UITextFieldDelegate,UIImagePickerControllerDelegate>{
  AppDelegate *appDelegate;
}

实施和使用:

- (void)viewDidLoad
{
     appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];  
     appDelegate.businessId = [businessId integerValue]; 
}

- (BOOL)credentialsValidated
{
     appDelegate.businessId = [[NSUserDefaults standardUserDefaults] integerForKey:BUSINESS_ID];
}

但我收到警告(虽然代码有效)

Incompatible integer to pointer conversion assigning to 'NSInteger *' (aka 'int *') from 'NSInteger' (aka 'int'); 

appDelegate中businessId的声明是:

@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property NSInteger *businessId;

和实施:

@implementation AppDelegate
@synthesize businessId;

3 个答案:

答案 0 :(得分:4)

从app delegate中的声明中删除*

@property NSInteger (assign) businessId;

NSInteger是一个原语,因此您不需要对象指针。

答案 1 :(得分:1)

一个。这不会给任何性能损失,除非你每秒称它为100000000。 BTW永远不会假设smth - 总是衡量。有一个名为Time Profiler的工具 - 用它来查找所有瓶颈。

B中。 NSInteger只是int的typedef - 它是POD类型而不是ObjC对象,所以你不能向它发送消息。使用NSInteger而不是NSInteger *。

答案 2 :(得分:1)

您可以像这样定义AppDelegate        #define DELEGATE(AppDelegate *)[[UIApplication sharedApplication] delegate];        现在您可以在需要的地方使用DELEGATE ..