更新到Xcode 7.3后,它将Cannot create __weak reference in file using manual reference counting
在pod文件中引发错误。有人解决了这个问题吗?
Answers:
设置Build Settings -> Apple LLVM 7.1 - Language - Objective C -> Weak References in Manual Retain Release
到YES
。
这是苹果公司通过链接提供的官方答案:
基于以下情况,此问题的行为符合预期:我们正在以所有Objective-C语言模式实现弱引用。由于“ __weak”在非ARC(和非GC)语言模式中一直被忽略,因此我们添加了此错误以指出将来语义将发生变化的地方。请更新您的错误报告,让我们知道这是否仍然是您的问题。
因此,基本上,如果将Pod用于第三方库,则必须删除非ARC中的__weak或等待更新。
更新@ 3/23
我应该更多地研究可以传递给编译器的标志,以便绕过这些东西。但是从根本上说__weak
,从现在开始,您就不应该在非ARC模式下使用,以避免任何意外的冲突。对于cocoapods用户,您不需要删除__weak
或等待更新,而是Weak References in Manual Retain Release
可以像Lean所说的那样将构建设置中的标志设置为YES。希望对您有所帮助。
解决此问题的最佳方法是将post_install
脚本添加到Podfile中,以将Weak References in Manual Retain Release
标记设置yes
为所有Pod目标中的。为此,只需将以下代码粘贴到您的代码的底部Podfile
。
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
end
end
end
有时,这样做会导致错误-fobjc-weak is not supported on the current deployment target
。您可以通过添加另一个配置选项来解决该问题,并强制所有Pod定位到所需的版本(基于此答案):
post_install do |installer_representation|
installer_representation.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.3'
end
end
end
FBSettings.m中Facebook弱引用的解决方法
对于Podfile,可以编写一个脚本以在pod安装/更新后运行,并在此进行描述。
post_install do | installer |
classy_pods_target = installer.pods_project.targets.find {| target | target.name == 'Facebook-iOS-SDK'}
classy_pods_target.build_configurations.each do | config |
config.build_settings['CLANG_ENABLE_OBJC_WEAK'] ||= 'YES'
end
end
CLANG_ENABLE_OBJC_WEAK如何找到魔术的话。 。
我发现了这个。
我想这意味着删除__weak
https://forums.developer.apple.com/thread/38934
嗯,在MRR(手动保留释放)下是否存在弱变量引用之类的问题?“ __weak”表示以下两项之一或全部:
无主引用(即不代表保留计数)。
归零引用(即,当释放引用的对象时,运行时归零)。
#1不适用于MRR,因为您无论如何都不会保留该变量。
#2也不适用于MRR,因为运行时支持在您未使用的GC和ARC [自动引用计数]中。
听起来好像编译器现在只是抱怨说它不能做它从未做过的事情。(对于应用程序委托,您将无法在运行时分辨出差异,因为通常不会释放应用程序委托。)
或更改__weak
为__unsafeunretained
。这将解决传统上的问题。由于MRC(在xCode 4-之前)__weak不在iOS中。
-Wall -Wextra -Wno-unused-parameter
启用了这些警告标志。)