gpt4 book ai didi

cocoa - 弧: How do you release a WindowController when the user closes the Window?

转载 作者:行者123 更新时间:2023-12-03 17:38:29 26 4
gpt4 key购买 nike

我正在尝试将一些旧代码转换为 ARC。旧代码在 WindowController 中执行此操作:

@interface PreferencesController () <NSWindowDelegate>

@end

@implementation PreferencesController

-(void)windowWillClose:(NSNotification*) notification {

[self autorelease];
}

@end

我的 AppDelegate 有一个指向 WindowController 的强指针:

@property(strong) PreferencesController* preferencesCtrl;

在 PreferencesController 中,我是否需要声明一个返回到 AppDelegate 的(弱)指针,然后执行如下操作:

-(void) windowWillClose:(NSNotification *)notification {

[[self appDelegate] setPreferencesCtrl:nil];

}

最佳答案

嗯,你的想法是对的。

但我可以让你变得更简单。

将您的应用程序委托(delegate)设置为 NSWindowDelegate。

@interface AppDelegate : NSObject <NSApplicationDelegate, NSWindowDelegate>

@property (strong) PreferencesController* preferencesCtrl;

@end

@implementation AppDelegate

- (void)doAction
{
// create window
// ...
self.preferencesCtrl.window.delegate = self; // set window delegate
}

- (void)windowWillClose:(NSNotification *)notification
{
self.preferencesCtrl=nil;
}

@end

UPD由于您已经在使用 NSWindowDelegate 方法,我建议您创建另一个委托(delegate)协议(protocol),例如 PreferenceControllerDelegate

//in PreferenceController.h before class interface
@class PreferenceControllerDelegate

@protocol PreferenceControllerDelegate <NSObject>

- (void)preferenceControllerWindowWillClose:(PreferenceControllerDelegate *)sender;

@end

@interface PreferenceController : NSWindowController

//...

@property (nonatomic,weak) id<PreferenceControllerDelegate> delegate;

//...

@end

这样就很合适了。

关于cocoa - 弧: How do you release a WindowController when the user closes the Window?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30229964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com