小编Leh*_*ves的帖子

iOS 7 Sprite Kit释放内存

我正在构建一款针对新iOS 7和Sprite Kit的iOS游戏,使用发射器节点和物理来增强游戏性.在开发应用程序时,我遇到了一个严重的问题:您创建了场景,节点和效果,但是当您完成并需要返回主屏幕时,如何释放这些资源分配的所有内存?

理想情况下,ARC应该释放所有内容,应用程序应该恢复到创建场景之前的内存消耗级别,但这不是发生的事情.

我添加了以下代码,作为视图的dealloc方法,它绘制场景并负责在关闭(删除)后删除所有内容:

- (void) dealloc
{
    if (scene != nil)
    {
        [scene setPaused:YES];

        [scene removeAllActions];
        [scene removeAllChildren];

        scene = nil;

        [((SKView *)sceneView) presentScene:nil];

        sceneView = nil;
    }
}
Run Code Online (Sandbox Code Playgroud)
  • sceneView是一个UIView,它是场景的容器
  • scene是SKScene类的扩展,创建所有SKSpriteNode对象

我非常感谢你对此事的任何帮助.

memory-management physics game-physics ios sprite-kit

20
推荐指数
4
解决办法
1万
查看次数

iOS 13 VoIP 推送通知 - didReceiveIncomingPushWith 在应用程序终止时不会被调用

我正在 iOS 应用程序中实现 VoIP 呼叫功能。在以下方法中,我立即使用 CallKit 报告来电:

func pushRegistry(_ 注册表:PKPushRegistry,didReceiveIncomingPushWith 负载:PKPushPayload,类型:PKPushType,完成:@escaping () -> Void)

当应用程序位于前台或后台时,会触发此方法并完美报告调用。但是,当应用程序终止时,根本不会调用此方法。

如果我从 XCode 运行应用程序,并在方案中添加“启动:等待可执行文件启动”选项,我可以看到,当 VoIP 推送到达时,某些内容会运行,但不是该方法。相反,几秒钟后我在控制台中收到以下消息:来自调试器的消息:由于信号 9 而终止

非常感谢任何帮助/想法/意见。

voip apple-push-notifications ios swift callkit

5
推荐指数
1
解决办法
1200
查看次数

CoreBluetooth和Wifi干扰

我真的遇到了问题,因此,不用说,我需要你的帮助.我正在使用CoreBluetooth在两个iDevices之间进行通信,它是相同的应用程序,在一台设备上作为中心运行,在另一台设备上作为外围设备运行.在某些情况下,中央会丢失与外围设备的连接,并出现以下错误:

Error Domain=CBErrorDomain Code=10 "The connection has failed unexpectedly." UserInfo=0x14ee8fe0 {NSLocalizedDescription=The connection has failed unexpectedly.}
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,外围设备是iPad 4,中央是iPad mini.我追踪到了问题,事实证明,一旦我遇到这个问题,每次我连接时问题都会持续存在,无论重启应用程序甚至是双方的蓝牙,不过,有趣的部分是,如果我关闭在中央设备上无线连接,连接不再超时.

你有什么建议,解决方法吗?这两款设备都运行iOS 7.1.1

wifi ios core-bluetooth

3
推荐指数
1
解决办法
3475
查看次数

AVAudioEngine AVAudioPlayerNode的时间管理和回调不正确

我对iOS8中的新音频引擎存在严重问题.我有一个使用AVAudioPlayer构建的应用程序,我试图找到一种迁移到新架构的方法,但是我遇到了以下问题(我相信你会同意,这是一个严重的基本障碍) :

我的头文件:

AVAudioEngine *engine;
AVAudioMixerNode *mainMixer;
AVAudioPlayerNode *player;
Run Code Online (Sandbox Code Playgroud)

我的m文件(在viewDidLoad中):

engine = [[AVAudioEngine alloc] init];
player = [[AVAudioPlayerNode alloc] init];

[engine attachNode:player];

NSURL *fileUrl = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp3"]];

AVAudioFile *file = [[AVAudioFile alloc] initForReading:fileUrl error:nil];

NSLog(@"duration: %.2f", file.length / file.fileFormat.sampleRate);

[player scheduleFile:file atTime:nil completionHandler:^{
    AVAudioTime *nodeTime = player.lastRenderTime;
    AVAudioTime *playerTime = [player playerTimeForNodeTime:nodeTime];

    float secs = (float)playerTime.sampleTime / file.fileFormat.sampleRate;

    NSLog(@"finished at: %.2f", secs);
}];

mainMixer = [engine mainMixerNode];

[engine connect:player to:mainMixer format:file.processingFormat];
[engine startAndReturnError:nil];

[player play];
Run Code Online (Sandbox Code Playgroud)

上面的代码初始化引擎和节点,然后开始播放我正在使用的任何文件.首先,它打印出音乐文件的持续时间,然后,在完成播放后,在回调函数中,它打印播放器的当前时间.这两个应该是相同的或者在最坏的情况下,彼此非常非常接近,但事实并非如此,这两个值之间的差异非常大,例如 …

avaudioplayer ios8 avaudioengine avaudiofile avaudioplayernode

2
推荐指数
1
解决办法
887
查看次数