Objective-C类别将AppDelegate作为属性返回

时间:2012-06-16 00:44:04

标签: objective-c objective-c-category

我正在UIViewController类上创建一个Objective-C类。在我的项目中,我想要一个单一且简单的方法来获得应用程序委托。

这就是我正在做的事情

// header file UIViewController+AppDelgate.h
#import <UIKit/UIKit.h>

@class ExampleAppDelegate;

@interface UIViewController (AppDelegate)
@property (weak, nonatomic, readonly) ExampleAppDelegate *appDelegate;
@end

// implementation file UIViewController+AppDelegate.m
#import "UIViewController+AppDelegate.h"
#import "ExampleAppDelegate.h"

@implementation UIViewController (AppDelegate)

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

@end

我应该将该属性定义为弱吗?我认为保留这个人是不好的,因为它通常会保留在其中引用的视图控制器上。

3 个答案:

答案 0 :(得分:1)

弱/强在这种情况下是一个没有实际意义的点,因为没有持有指针的本地实例变量。 ARC将做正确的事情(即,它不会发送比任何给定范围的版本更多的保留。)

答案 1 :(得分:0)

为什么不用类方法创建一个Utility类来做同样的事情,然后你可以引用它:

[Utility appDelegate];

并且您不必为每个需要访问AppDelegate的ViewController添加属性,就像您当前设置它一样。

答案 2 :(得分:0)

从您的实现看起来您不需要定义属性,您只需要声明方法-(ExampleAppDelegate *)appDelegate;

这当然只有在类的实例上调用时才有效,除非你把它作为类方法。