我是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;
答案 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 ..