Novo conteúdo adicionado após iOS16

O cache de disco referente à consistência do protocolo só foi adicionado após o iOS16, e no Swift Runtime do iOS 15, não há chamada para o cluster do método onDisk dentro do método findConformanceWithDyld.

O cache de memória do dyld para consistência do protocolo também foi adicionado no Swift 5.4

Em Objective-C, quase todas as chamadas de método serão convertidas em envio de mensagens, e a única maneira de enviar mensagens é objc_msgSend. A função objc_msgSend no encaminhamento de mensagens é baseada em montagem, então por que a Apple adota esse design de solução? Pano de lã?

Existem dois motivos:

1. É impossível implementar uma função que retenha parâmetros desconhecidos e possa saltar para qualquer ponteiro de função através da linguagem C;

2. A velocidade de execução de objc_msgSend é muito importante, portanto cada uma de suas instruções deve ser o mais eficiente possível para ser executada o mais rápido possível.

TLS: armazenamento local de thread Armazenamento local de thread, seu objetivo é usar um pedaço de memória como armazenamento específico de thread para ler e escrever na forma de valor-chave.

Quando o método objc_autoreleaseReturnValue é chamado no valor de retorno, o tempo de execução armazena o objeto de valor de retorno em TLS.

Em seguida, retorne diretamente este objeto (sem chamar autorelease); ao mesmo tempo, no objc_retainAutoreleasedReturnValue que recebe o valor de retorno externamente, verifica-se que este objeto está armazenado em TLS, então retorne diretamente este objeto (sem chamar reter). Como resultado, o chamador e o receptor usam TLS para transferência, o que elimina tacitamente a necessidade de gerenciamento de memória do valor de retorno.

Antes de objc4, objc_autoreleaseReturnValue / objc_retainAutoreleaseReturnValue armazenará o obj de entrada usando TLS e obterá o objc original de acordo com a chave em objc_retainAutoreleasedReturnValue / objc_unsafeClaimAutoreleasedReturnValue para comparação. Se forem iguais, nada será feito. objc4 foi otimizado e não armazena mais o obj original. objc_autoreleaseReturnValue / objc_retainAutoreleaseReturnValue armazena apenas um bit de sinalização ReturnDisposition. objc_retainAutoreleasedReturnValue / objc_unsafeClaimAutoreleasedReturnValue usa o bit de sinalização para determinar se é necessário reter ou liberar.

Supongo que te gusta

Origin blog.csdn.net/qq_37269542/article/details/130111255
Recomendado
Clasificación