Pregunta

Tengo una clase personalizada que uso con frecuencia en mis proyectos. Esta clase tiene varios métodos, pero no todos ellos se utilizan en cada proyecto.

Mi pregunta es:? Incluyendo esta clase en un proyecto va a hinchar el proyecto con código será inútil o el compilador basta con incluir los métodos utilizados

Es decir, si mi clase tiene 30 métodos, pero sólo 4 están siendo utilizados en el proyecto en particular el compilador incluir también la otra sin usar 26 o sólo el 4 utilizado en el producto final?

En caso de que incluye todo, ¿hay alguna manera de obligarlo a pasar por alto los métodos utilizados y recortar el binario al mínimo?

¿Fue útil?

Solución

Los soportes enlazador muertos-stripping , si es que lo encienda código no utilizado no debería causa cualquier hinchazón.

Desde el documentos de Apple :

  

El enlazador estático (ld) apoya el   eliminación de código y datos no utilizados   a partir de archivos ejecutables. Este proceso   (Conocido como extracción de código muerto) ayuda   reducir el tamaño total de   ejecutables, que a su vez mejora   el rendimiento al reducir la memoria   huella del ejecutable. También   permite que los programas para vincular con éxito   cuando el código no utilizado se refiere a una   símbolo indefinido (en lugar de resultante   en un error de enlace).

     

extracción de código muertos no se limita a   la eliminación de funciones sólo no utilizados y   código ejecutable a partir de un sistema binario. los   enlazador también elimina cualquier símbolos no usados   y los datos que residen en los bloques de datos.   Tales símbolos podrían incluir mundial   las variables, las variables estáticas, y   datos de cadena, entre otros.

     

Cuando se habilita la extracción de código muerto,   las búsquedas de engarce estática para el código   que es inalcanzable desde una inicial   conjunto de símbolos vivos y bloques.

Otros consejos

Si los otros 26 métodos tienen código en @implementation, entonces sí, se van a utilizar en el producto final.

La razón es debido al sistema de tiempo de ejecución. Incluso si usted no ha utilizado que el 26 por métodos en tiempo de compilación, no hay garantía de que no serán referidos en tiempo de ejecución (recuerda NSSelectorFromString y -performSelector:).

No sé si hay una manera de forzar a eliminar estos códigos. (-dead_strip no funciona.)

Parece que usted necesita para refactorizar y cambiar el nombre de la clase de los grandes mamma grasa.

  

Mi pregunta es: incluyendo esta clase   en un proyecto inflar el proyecto   con código inútil o lo hará el compilador   basta con incluir los métodos utilizados?

creo que está hablando incluyendo el encabezado e implementación de su clase de ayuda. Esto aumentará el tamaño binario. Como a cabo en punta por jessecurry el enlazador apoya callejón sin salida de extracción. Esto es malo, ya que siempre existe la posibilidad que alguien quiere enlace con la API pública de su binario (afortunadamente esto no es el caso ya que la vinculación dinámica no está permitido en el iPhone pero tenga en cuenta otras plataformas). Pero apuesto a la diferencia de tamaño es demasiado marginal a ser significativo.

El mayor impacto en términos de tamaño es por lo general los recursos que incluir con su solicitud (imágenes, cuerdas, etc.).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top