Objective-C 将非本地对象的地址传递给 __autoreleasing 参数
Objective-C Passing address of non-local object to __autoreleasing parameter
如何更改这行代码 [NgnAVSession releaseSession: &audioSession];
以便不再出现此错误:
Passing address of non-local object to __autoreleasing parameter for
write-back
这就是整个方法
- (void)viewWillDisappear:(BOOL)animated
{
[NgnAVSession releaseSession: &audioSession];
[UIDevice currentDevice].proximityMonitoringEnabled = NO;
}
这里是releaseSession的声明
页眉
+(void) releaseSession: (NgnAVSession**) session;
实施
+(void) releaseSession: (NgnAVSession**) session{
@synchronized (kSessions){
if (session && *session){
if([(*session) retainCount] == 1){
[kSessions removeObjectForKey:[*session getIdAsNumber]];
}
else {
[(*session) release];
}
*session = nil;
}
}
}
您使用的是一个非常古老的库。尝试获取更新版本。
然后阅读 Cocoa 如何使用 NSError*。你真的需要这样做,否则你不可能理解发生了什么。
长话短说:编译器假定您传递的是自动释放变量的地址。如果需要,它可以将局部变量转换为自动释放变量。这不能用非局部变量来完成。
这些家伙的所作所为是错误的,错误的,错误的,错误的,错误的。如果他们想在不计算引用的情况下跟踪所有会话,最简单的方法是创建一个包含弱引用的包装对象,将包装对象放入数组中,然后在 dealloc 方法中可以从数组中删除对象。
我建议你扔掉他们的 releaseSession 并完全按照我之前说的去做。
如何更改这行代码 [NgnAVSession releaseSession: &audioSession];
以便不再出现此错误:
Passing address of non-local object to __autoreleasing parameter for write-back
这就是整个方法
- (void)viewWillDisappear:(BOOL)animated
{
[NgnAVSession releaseSession: &audioSession];
[UIDevice currentDevice].proximityMonitoringEnabled = NO;
}
这里是releaseSession的声明
页眉
+(void) releaseSession: (NgnAVSession**) session;
实施
+(void) releaseSession: (NgnAVSession**) session{
@synchronized (kSessions){
if (session && *session){
if([(*session) retainCount] == 1){
[kSessions removeObjectForKey:[*session getIdAsNumber]];
}
else {
[(*session) release];
}
*session = nil;
}
}
}
您使用的是一个非常古老的库。尝试获取更新版本。
然后阅读 Cocoa 如何使用 NSError*。你真的需要这样做,否则你不可能理解发生了什么。
长话短说:编译器假定您传递的是自动释放变量的地址。如果需要,它可以将局部变量转换为自动释放变量。这不能用非局部变量来完成。
这些家伙的所作所为是错误的,错误的,错误的,错误的,错误的。如果他们想在不计算引用的情况下跟踪所有会话,最简单的方法是创建一个包含弱引用的包装对象,将包装对象放入数组中,然后在 dealloc 方法中可以从数组中删除对象。
我建议你扔掉他们的 releaseSession 并完全按照我之前说的去做。