我正在尝试创建一个应用程序来处理一组框架,jpg使用Google-vision API 存储到应用程序中.
管道很简单.
1)我用一些选项创建了探测器:
_options = @{
GMVDetectorFaceLandmarkType : @(GMVDetectorFaceLandmarkAll),
GMVDetectorFaceClassificationType : @(GMVDetectorFaceClassificationAll),
GMVDetectorFaceTrackingEnabled : @(NO)
};
_faceDetector = [GMVDetector detectorOfType:GMVDetectorTypeFace options:_options];
Run Code Online (Sandbox Code Playgroud)
2)我用这种方法读取了一个框架:
UIImage *image = [UIImage imageWithContentsOfFile:imFile];
Run Code Online (Sandbox Code Playgroud)
imFile中包含的路径是正确的,我可以看到图像表示
3)最后,我处理框架:
NSArray<GMVFaceFeature *> *faces = [_faceDetector featuresInImage:image options:nil];
Run Code Online (Sandbox Code Playgroud)
使用这段代码我可以处理一些帧,但是当分析它们中的很多时,应用程序的内存使用量不断增加,应用程序会自动被杀死.
我试图跟踪内存泄漏,但据我追踪它,它来自最后一部分内部,内部 [detector featuresInImage...]
有什么我做错了,或者里面有内存泄漏?我试图从谷歌找到任何问题,但无法找到它.
编辑:
以下是我对探测器的每个结果所做的事情:
if ([faces count]>0){
GMVFaceFeature *face = [faces objectAtIndex:0];
NSFileHandle *myHandle = [NSFileHandle fileHandleForWritingAtPath:filename];
[myHandle seekToEndOfFile];
NSString* lineToWrite = [NSString stringWithFormat:@"%u",fNumber];
lineToWrite = [lineToWrite stringByAppendingString:[NSString stringWithFormat:@",%f",face.smilingProbability]];
lineToWrite = [lineToWrite stringByAppendingString:@"\n"];
NSError *errorWrite;
[myHandle writeData:[lineToWrite …Run Code Online (Sandbox Code Playgroud) 我有2个框架由我创建,使用(两个)我也创建的库.
第一个框架初始化库并完成其所有工作流程.完成第一个框架后,第二个框架必须启动.但是当第二个开始时,在初始化库之后,使用两个框架的应用程序崩溃并出现exc_bad_access错误.
显然,库是正确创建的,但是如果我在第二个框架中对代码行进行注释以初始化库,则工作流将继续(之后崩溃,因为它没有库初始化).
有什么我做错了吗?我应该使用两个单独的库吗?
编辑:
想象一下情况:
框架A有这样的方法:start,stop.虽然它有效但它委托给方法:infoFromA, frameworkAFinished.
框架B有这样的方法:start,stop.虽然它有效但它委托给方法:infoFromB, frameworkBFinished.
两个启动方法都初始化了所提到的静态库(让我们调用它problematicLibrary).
两个框架都提供了一些视图来实现其功能.所以让我们举一个应用程序工作流程的例子.
在app视图viewWillAppear方法中,我使用以下命令启动Framework A.
[FrameworkA start];,这将初始化库并呈现视图.使用此视图(使用my problematicLibrary),一些信息将委派给infoFromA委派方法.在委托完所有信息后,它将委托给frameworkAFinished.
当FrameworkA委托frameworkAFinished我开始下一个框架时:[FrameworkB start].作为另一个框架,它将初始化库并呈现视图.在调试时,完成了库的所有初始化(创建了所需对象的实例并创建了库的新实例),并且当它呈现视图时,它会通过该viewDidLoad方法然后exc_bad_access在problematicLibrary初始化行引发错误(之前已经完成并继续呈现视图!!)而不从视图中进入任何其他方法.
我已经检查了初始化是否运行良好,并且所有变量在null初始化之前都处于值,并且为库对象提供了新的内存地址.