Использование нескольких раз 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 2

3 ответа:

Удалите * из вашего объявления в делегате приложения:

@property NSInteger (assign) businessId;

NSInteger это примитив, поэтому вам не нужен указатель на объект.

A. Это не даст никакого штрафа за производительность, если вы не назовете его 100000000 в секунду. Кстати, никогда не предполагайте что-то-всегда измеряйте. Существует инструмент под названием Time Profiler-используйте его, чтобы найти все узкие места.

B. NSInteger-это просто typedef для int-это POD-тип, а не объект ObjC, поэтому вы не можете отправлять ему сообщения. Используйте NSInteger вместо NSInteger*.

Вы можете определить AppDelegate следующим образом #define DELEGATE (AppDelegate *) [[UIApplication sharedApplication] делегат]; теперь вы можете использовать делегат там, где вам нужно..