ios - 我想知道 capturing self strongly in this block 警告造成的后果有哪些
PHPz
PHPz 2017-04-17 17:50:04
0
3
660

项目上线了 但是一直有一个BUG修复不了 似乎那个crash崩溃地址每次都不同 所以很难定位类似libobjc.A.dylib objc_msgSend (sendMessage:)这样的错误

检查代码 发现有这么一个在ARC模式下的警告
capturing self strongly in this block is likely to lead to a retain cycle 这是一个block导致的循环引用
这个警告会导致什么问题 会导致直接崩溃吗 我想知道跟上面的崩溃有联系吗

PHPz
PHPz

学习是最好的投资!

répondre à tous(3)
Ty80

Il existe quelques différences entre les deux.
objc_msgSend (sendMessage:) est dû au fait que la méthode est appelée sur l'objet publié.

se capturer fortement dans ce bloc est susceptible de conduire à un cycle de rétention
empêchera la libération de l'objet créé.
Par exemple, chaque fois que vous entrez un vc, celui-ci est nouvellement créé. Le bloc en vc a une forte référence à soi.
Cela empêchera la publication de ce vc. Un nouveau vc sera créé à chaque fois que vous entrerez, et l'ancien vc existera toujours. Finalement, l'application sera effacée par le système car elle occupe trop de mémoire.

Ty80

C'est possible, mais peu probable, mais la référence circulaire doit être supprimée.

左手右手慢动作

Cela provoquera une fuite de mémoire, mais le fait que cela provoque un crash dépend de la situation.
Par exemple, un certain VC a enregistré une notification, mais en raison d'une référence circulaire, elle n'a pas été publiée correctement. Après cela, la notification a été publiée ailleurs, alors le VC effectuera l'opération correspondante, peut-être si l'opération fait l'objet. a été publié, il peut planter.
Il est difficile de localiser des erreurs comme votre libobjc.A.dylib objc_msgSend (sendMessage :). Vous devriez voir s'il y a d'autres informations, comme quelque chose de similaire à ceci :

Vous pouvez essayer d'utiliser Fabric.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal