iOS不同类型的应用代理之间有什么区别?

时间:2015-06-04 06:06:54

标签: ios objective-c

我是iOS的初学者,我知道这是基本的问题,但它为我创造了很多困难,并且由于app委托声明而面临几个问题。 这种所有类型的appdelegate声明和声明它们之间有什么区别?

1)当我们将appdelegate声明为此对象时。

//in viewcontroller.h file

#import "AppDelegate.h"
#import "FriendsViewController.h"
#import "XMPPStream.h"
@class AppDelegate;
@interface ViewController :UIViewController<XMPPStreamDelegate,UITextFieldDelegate, UIAlertViewDelegate, UIApplicationDelegate> 
{
    UIView *padding;
    AppDelegate *appdelegate;
}

2)当我们在属性中声明appdelegate时。

//in viewcontroller.h file
@property (weak, nonatomic) AppDelegate *appdelegate;

3)当我们在viewcontroller.m文件中声明appdelegate来制作对象时。

//in viewcontroller.m file
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];
AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

4)当我们宣布这样的appdelegate时

// in Viewcontroller.m file
+(AppDelegate *) sharedAppDelegate
{
    return (AppDelegate *) [UIApplication sharedApplication].delegate;
}

差异

- (AppDelegate *)appDelegate
{
    return (AppDelegate *)[[UIApplication sharedApplication] delegate];
}

我知道这是一个基本问题,但很多像我这样的人都难以申报。

1 个答案:

答案 0 :(得分:-2)

第一个一个用于创建类的私有对象。

AppDelegate *appdelegate;

第二个一个用于创建类的公共和全局对象,使用 属性属性

@property (weak, nonatomic) AppDelegate *appdelegate;

但前两个只是对象声明 第三,第四和第五是相同的,differance是dot(。)用于getter和setter方法,方括号表示它不是属性,而是它是该类的类方法。 / p>

在声明的对象中,您正在传递appDelegate的实例

第4个案例是class methods,第5个案例是instance method

AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
//or
AppDelegate *appdelegate = (AppDelegate *) [UIApplication sharedApplication].delegate;