我的数据泄漏很奇怪,希望有人可以解释这里出了什么问题。最小的工作示例项目如下:
SaveChanges()
和[HttpPost]
public ActionResult Save(Customer customer)
{
if (ModelState.IsValid)
{
if (customer.Id == 0)
{
_context.Customers.Add(customer);
}
else
{
var customerInDb = _context.Customers.Single(c => c.Id == customer.Id);
customerInDb = customer;
}
_context.SaveChanges();
return RedirectToAction("Index", "Customers");
}
else
{
// validation failed, show the form again with validation errors
return View(customer);
}
}
以外的所有内容Info.plist
中执行以下操作:
main.m
。Info.plist
更改为“ AppHook”。Main nib file base name
并将其设置为Principal class
。接下来,将LSUIElement
更改为:
YES
并添加以下两个新文件:main.m
#import <Cocoa/Cocoa.h>
#import "AppHook.h"
int main(int argc, const char * argv[]) {
[[AppHook sharedApplication] run];
return 0;
}
和AppHook.h
:
#import <Cocoa/Coco a.h>
@interface AppHook : NSApplication <NSApplicationDelegate, NSMenuDelegate>
@property (strong) NSStatusItem *barItem;
@end
使用Instruments和Leaks模板运行此应用程序时,出现以下CFData泄漏:
AppHook.m
每次打开和关闭状态菜单时都会发生这种情况。因此,反复点击菜单图标会造成大量泄漏。
这里没什么好想的,只是#import "AppHook.h"
@implementation AppHook
- (instancetype)init {
self = [super init];
self.delegate = self;
return self;
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
self.barItem = [NSStatusBar.systemStatusBar statusItemWithLength:NSVariableStatusItemLength];
self.barItem.highlightMode = YES;
self.barItem.title = @"yep";
self.barItem.menu = [[NSMenu alloc] initWithTitle:@"M"];
self.barItem.menu.delegate = self;
self.barItem.menu.autoenablesItems = NO;
}
- (NSInteger)numberOfItemsInMenu:(NSMenu*)menu {
return 1;
}
- (BOOL)menu:(NSMenu*)menu updateItem:(NSMenuItem*)item atIndex:(NSInteger)index shouldCancel:(BOOL)shouldCancel {
item.title = [NSString stringWithFormat:@"%@", [NSDate date]];
return YES;
}
@end
的子类(我需要重写0 Malloc +1 1 00:03.319.300 AppKit _DPSNextEvent
1 CFRetain +1 2 00:03.319.303 AppKit CopyCarbonUIElementAttributeValue
2 CFRelease -1 1 00:03.319.310 AppKit _DPSNextEvent
)。
答案 0 :(得分:0)
所以...经过很长一段时间后,它又发生了。
重新启动Mac。
您可以看到我的最新评论是近一个月前的事。从那时起,我两次重新启动了Mac,并始终检查Xcode Profiler。对于这两次重新启动,探查器没有显示任何泄漏。我不确定大约在两周前何时进行了最后一次重新启动。今天,我注意到Profiler再次显示了相同的泄漏。
无效的工作是什么
似乎是macOS本身的错误。我会创建一个错误报告,但老实说,我什至不知道该写些什么。可重复性只是偶然:-/
而且,它不依赖于特定项目。将此示例项目用作参考,并在上个月保持不变。