Использование нескольких раз appDelegate в одном и том же UIViewController
Я новичок в objective-C и cocoa.
В моем 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');
Объявление businessId в appDelegate это:
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property NSInteger *businessId;
И реализация:
@implementation AppDelegate
@synthesize businessId;
3 ответа:
Удалите
*
из вашего объявления в делегате приложения:@property NSInteger (assign) businessId;
NSInteger
это примитив, поэтому вам не нужен указатель на объект.
A. Это не даст никакого штрафа за производительность, если вы не назовете его 100000000 в секунду. Кстати, никогда не предполагайте что-то-всегда измеряйте. Существует инструмент под названием Time Profiler-используйте его, чтобы найти все узкие места.
B. NSInteger-это просто typedef для int-это POD-тип, а не объект ObjC, поэтому вы не можете отправлять ему сообщения. Используйте NSInteger вместо NSInteger*.