2

我是 Objective-C 和可可的新手。

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

A. 在每个方法中调用:

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;
4

3 回答 3

4

*从应用委托中的声明中删除:

@property NSInteger (assign) businessId;

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

于 2012-12-11T11:12:38.627 回答
1

答:除非您将其称为每秒 100000000,否则这不会造成任何性能损失。顺便说一句,从不假设——总是衡量。有一个名为 Time Profiler 的工具 - 使用它来查找所有瓶颈。

B. NSInteger 只是 int 的 typedef - 它是 POD 类型而不是 ObjC 对象,因此您不能向它发送消息。使用 NSInteger 而不是 NSInteger*。

于 2012-12-11T11:12:48.927 回答
1

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

于 2012-12-16T05:35:52.190 回答