小编Iva*_*van的帖子

Google Vision API可能存在内存泄漏

我正在尝试创建一个应用程序来处理一组框架,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)

memory-leaks ios google-vision google-ios-vision

10
推荐指数
0
解决办法
283
查看次数

使用库崩溃的框架

我有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_accessproblematicLibrary初始化行引发错误(之前已经完成并继续呈现视图!!)而不从视图中进入任何其他方法.

我已经检查了初始化是否运行良好,并且所有变量在null初始化之前都处于值,并且为库对象提供了新的内存地址.

xcode cocoa-touch frameworks ios

8
推荐指数
1
解决办法
667
查看次数