Entendendo o tempo de execução dinâmico do Objective-C
-
14-09-2019 - |
Pergunta
Estou molhando meus pés no Objective-C e Cocoa (eu sei, provavelmente tarde, mas ei, tenho que começar em algum lugar) e notei que todos os objetos são alocados da pilha.
Existe alguma razão pela qual esse é o padrão no Objective-C? Eu tentei olhei em todos os lugares (e sim, mesmo no Stackoverflow), mas não consegui encontrar nenhum motivo explícito, exceto "é assim que é". Estou especialmente interessado porque o Objective-C é considerado um super-definido rigoroso de C com recursos OO.
Se eu perdi um artigo sobre o Interblag Ou um post no StackOverflow por engano neste tópico, inicie o desligamento gracioso. :)
Solução
Eu acho que isso deve à herança de SmallTalk.
Além disso, você poderia dizer que objetos alocados em pilha são uma peculiaridade do C ++. Muito poucos outros idiomas fazem isso, e depois principalmente como uma otimização de baixo nível para o compilador. Em C ++ é razoável, já que um dos objetivos declarados era ser exatamente Tão Performant quanto Plain C.
Por que você acha que isso está em conflito com o fato de que o Objective-C é um super-set de C? Afinal, a Plain C não pode alocar objetos na pilha ... nem em qualquer lugar. struct
S, OTOH, são permitidos na pilha, tanto em C e Objective-C
Outras dicas
Não estou respondendo exatamente sua pergunta, mas como você está entendendo o tempo de execução do OBJ-C, aqui vai. Você pode alocar objetos com mais eficiência usando nszones. Você não os terá na pilha, mas pelo menos pode evitar alguns problemas de fragmentação e desempenho:Texto do link