- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我希望标题不会太误导... :)
我播放系统声音并像这样向其添加 SoundCompletion-Callback:
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, completionCallback, (__bridge_retained void *)self);
而 «self» 是一个简单的 NSObject
在完成回调中,我尝试再次调用播放例程:
我必须将 __bridge_transfer 和 __bridge_retained 添加到转换中,否则会出现错误、崩溃或其他意外行为。
但尽管如此,整个事情还是行不通。
我将要播放的声音存储在 NSMutableArray 中,获取数组的第一个条目并播放它,添加声音完成并希望事情发生。但是 - 对于所有保留传输的东西,NSMutableArray 在第二次调用时是空的......
代码如下:
static void completionCallback (SystemSoundID mySSID, void *myself) {
NSLog(@"Audio callback");
AudioServicesRemoveSystemSoundCompletion (mySSID);
AudioServicesDisposeSystemSoundID(mySSID);
[(__bridge_transfer Speaker *)myself speakCharacter];
CFRelease(myself); // I heard I need this?
}
-(void)speakCharacter{
if([sounds count] > 0){
NSString *soundToPlay = [sounds objectAtIndex:0];
[sounds removeObjectAtIndex:0];
NSLog(@"TxtToSpeak %@", soundToPlay);
CFURLRef soundFileURLRef;
NSURL *path = [[NSBundle mainBundle] URLForResource:[soundToPlay uppercaseString] withExtension:@"aif"];
soundFileURLRef = (__bridge CFURLRef)path;
SystemSoundID soundID;
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, completionCallback, (__bridge_retained void *)self);
AudioServicesPlaySystemSound (soundID);
}
}
[编辑] - 回答我自己的问题:
总是很高兴自己找到它:)
事实证明,我快到了。
设置回调的调用如下:
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, completionCallback, (__bridge_retained void *)self);
然后,在回调函数中,我这样做:
myClass *theClass = (__bridge myClass *)myself;
CFRelease(myself);
[theClass playNextSound]; // The routine that plays the sounds
它有效...
最佳答案
我无法回答我自己的问题,因为我对 StackOverflow 来说太快了 - 所以为了使这个完整,我再次添加答案:)
事实证明,我快到了。
设置回调的调用如下:
AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, completionCallback, (__bridge_retained void *)self);
然后,在回调函数中,我这样做:
myClass *theClass = (__bridge myClass *)myself;
CFRelease(myself);
[theClass playNextSound]; // The routine that plays the sounds
它有效...
关于iphone - AudioServicesAddSystemSoundCompletion 在 ARC 下使用 __bridge,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9069726/
我在我的 iOS 中使用 nsxml 解析,这意味着我必须关闭 arc。但是,添加联系人需要使用 __bridge,这会导致使用不带弧的 ABRecordCopyCompositeName 发生崩溃。
正如我们所知,使用 ARC 我们需要一个 __bridge 来将 id 转换为 void *: void *t = (void *)self; // ERROR: Cast of
今天我发现框架中的常量不需要在 cast 语句中包含 __bridge。喜欢: NSString *cast = (NSString *) kUTTypeMovie; 在哪里 extern const
我正在尝试将 CFUUIDRef 转换为 NSString *。 之前,我使用了以下代码,并且运行良好。 CFStringRef str = CFUUIDCreateString(NULL, _uui
这个问题在这里已经有了答案: Where and how to __bridge (2 个答案) 关闭 9 年前。 谁能解释一下什么是“__bridge_transfer”和“_bridge”以及何
我正在尝试使用 swift 获取具有特定名称的联系人列表。我有以下代码: let owner = owners[indexPath.row]; var addressBook = ABAddressB
我正在尝试将 CFUUIDRef 转换为 NSString *。 之前,我使用了以下代码,并且运行良好。 CFStringRef str = CFUUIDCreateString(NULL, _uui
有人可以帮我转换下面的代码以支持 ARC 吗? UIFont *boldFont = [UIFont fontWithName:@"DINPro-Medium" size:14]; CTFontRef
我希望标题不会太误导... :) 我播放系统声音并像这样向其添加 SoundCompletion-Callback: AudioServicesAddSystemSoundCompletion(sou
我有这段代码使用“__bridge”来转换颜色的 id: CGColorRef tabColor = (5 == 5 ? [UIColor blu
我在下面试过,但编译器不理解: //Foo.mm id anObjOfTypeFoo; Foo* obj = (Foo*) anObjOfTypeFoo; //ERROR: must use __br
如果是很基础的问题请多多包涵。我尝试使用 __bridge 将 CFStringRef 转换为 NSString,因为我启用了 ARC。 mydevUUIDString = CFUUIDCreateS
我正在尝试将 ABRecordRef 项添加到我的 NSMutableArray 中。刚了解到需要使用 (_bridge id) 将 C TypeDef 转换为 Objective-C id 类型。因
我的问题很简单,我想知道 "CGImageSourceCreateWithData" 方法是否创建了一个复制我提供的数据的新对象,以便我在不需要时必须释放它不再使用它,或者如果它只是创建对我已经拥有的
我一直在使用以下代码将地址簿联系人的缩略图图像获取到 UIImage 中。但是,代码给出了 Core Foundation 警告,对象可能泄漏: // Potential leak of an obj
出于某种原因,我希望在运行循环的下一次迭代期间执行一个 block ,所以我想出了: typedef void (^resizer_t)() ; - (void) applyResizer: (res
我在 NSMutableArray 上收到此错误: -[Not A Type release]: message sent to deallocated instance 0x1006e29c0
我正在为 iOS 5 创建一个应用程序,并且正在绘制一些渐变。以下渐变代码我在 ARC 之前一直使用,但现在当我多次使用它时它不再适用于我的设备(但是,它适用于模拟器)(所以我认为这是内存管理问题)。
我有一些纯 C++ 代码,它在指向 Objective C 类中方法的函数指针的帮助下从 Objective-C 数据结构中读取。我将要读取的 Objective-C 类实例视为不透明指针。例如,执行
ARC 迁移工具遇到了这个问题: NSURL *fileURL = [NSURL fileURLWithPath:path]; AudioFileOpenURL((CFURLRef)fileURL,
我是一名优秀的程序员,十分优秀!