我相信这可能是我以前从未使用ARC的事实,所以我确定我错过了一些事情.
我正在尝试创建状态栏应用程序,没有主窗口或停靠图标.当我运行应用程序时,我的应用程序的状态栏图标会短暂显示约一秒钟,但会消失.
我的代码
QuickPlusAppDelegate.h
#import <Cocoa/Cocoa.h>@interface QuickPlusAppDelegate : NSObject <NSApplicationDelegate>@property (assign) IBOutlet NSWindow *window;@property (assign) NsstatusItem *statusItem;@property (weak) IBOutlet NSMenu *statusItemmenu;@property (strong) NSImage *statusItemIcon;@property (strong) NSImage *statusItemIconHighlighted;@property (strong) NSImage *statusItemIconNewNotification;@end
QuickPlusAppDelegate.m
#import "QuickPlusAppDelegate.h"@implementation QuickPlusAppDelegate@synthesize statusItemmenu = _statusItemmenu;@synthesize window = _window,statusItem = _statusItem;@synthesize statusItemIcon = _statusItemIcon,statusItemIconHighlighted = _statusItemIconHighlighted,statusItemIconNewNotification = _statusItemIconNewNotification;- (voID) awakeFromNib{ NSBundle *appBundle = [NSBundle mainBundle]; _statusItemIcon = [[NSImage alloc] initWithContentsOffile:[appBundle pathForResource:@"statusItemIcon" ofType:@"png"]]; _statusItemIconHighlighted = [[NSImage alloc] initWithContentsOffile:[appBundle pathForResource:@"statusItemIconHighlighted" ofType:@"png"]]; _statusItemIconNewNotification = [[NSImage alloc] initWithContentsOffile:[appBundle pathForResource:@"statusItemIconNewNotification" ofType:@"png"]]; _statusItem = [[Nsstatusbar systemStatusbar] statusItemWithLength:NSVariableStatusItemLength]; [_statusItem setimage:_statusItemIcon]; [_statusItem setAlternateImage:_statusItemIconHighlighted]; [_statusItem setHighlightmode:YES];}- (voID)applicationDIDFinishLaunching:(NSNotification *)aNotification{ // empty}@end
编辑如果看到我的代码有问题,请让我知道.我肯定会有一些批评,所以我可以变得更好.
另一个编辑当主窗口本身加载时,状态栏图标似乎消失.
解决方法 在这种情况下,_statusItem将被自动释放._statusItem = [[Nsstatusbar systemStatusbar] statusItemWithLength:NSVariableStatusItemLength];
这返回一个自动释放的对象. _statusItem只是一个iVar.不仅如此,您将该属性声明为assign:
@property (assign) NsstatusItem *statusItem;
你可能想在这里做的是使属性强,然后,而不是直接设置ivar,使用属性来设置它.所以这样:
@property (strong) NsstatusItem *statusItem;
接着:
self.statusItem = [[Nsstatusbar systemStatusbar] statusItemWithLength:NSVariableStatusItemLength];
这将导致statusItem被保留.我敢打赌,现在发生的情况是,当自动释放池d出时,它会被释放,然后在下次尝试访问它的应用程序崩溃时,导致它从菜单栏中消失.通过僵尸仪器运行它会告诉你,如果这是发生了什么事情.但是一般来说,你的应用程序需要有一个强有力的参考,以便它坚持下去.
总结以上是内存溢出为你收集整理的objective-c – NSStatusItem在启动时短暂出现,但会立即消失全部内容,希望文章能够帮你解决objective-c – NSStatusItem在启动时短暂出现,但会立即消失所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)