Vai al contenuto

app funziona su simulatore ma non su iphone


Messaggi raccomandati

ciao a tutti, ho provato a creare un'app semplice semplice. è formata da qualche UIImageView organizzate in un array ( UIImageView *image[30] ) le quali una volta toccate devono cambiare immagine.

le mie immagini sono chiamate:

inizio1.jpg fine1.jpg

inizio2.jpg fine2.jpg

inizio3.jpg fine3.jpg

........... ............

inizio30.jpg fine30.jpg

quindi ogni UIImageView è inizializzata con la rispettiva immagine "inizioX.jpg" e una volta toccata dovrà assumere "fineX.jpg" dove "X" indica il numero dell'immagine.

Per realizzare questo è bastato scrivere (con relativi controlli) dentro l'evento "touchesEnded":

int X;   //numero immagine
.....       //controlli vari
image[X] .image= [uIImage imageNamed:[[NSString alloc] initWithFormat:@"fine%d.png", X ]];    

in questa maniera funziona, ma il tutto è molto lento, quando tocco un'immagine ci mette quasi 1 secondo a cambiare da "inizioX.png" a "fineX.png".

Ho provato allora ad allocare tutte le immagini nel viewDidLoad utilizzando 2 array UIImage

UIImage *imgInizio[30];
UIImage *imgFine[30];

il codice dentro a "touchesEnded" è quindi diventato questo:

int X;   //numero immagine
.....       //controlli vari
image[X].image = imgFine[X];    

Ho testato questo metodo su 1 o 2 immagini e la velocità è migliorata notevolmente, peccato che se estendo l'algoritmo a tutte e 30 le immagini il programma crasha quasi sempre su iPhone appena tocco un'immagine mentre sul simulatore fa quello che dovrebbe fare.

E' un problema di gestione della memoria? avete idee alternative al mio metodo per velicizzare il cambio di immagini?

Mi sto scervellando da molto ma non trovo soluzioni, spero qualcuno possa aiutarmi. grazie in anticipo e scusate per il papiro :D

Link al commento
Condividi su altri siti

allora... prima di tutto ti parlo da half/ing informatico che sono e onniscente conoscitore dei fausti linguaggi di programmazione...

Il problema a me sembra prima di tutto di esaurimento della memoria volatile... dunque dovresti deallocare la memoria al puntatore definito prima di riallocare memoria per una nuova foto, o più astrattamente di segmentation fault (accesso alla memoria non autorizzato).

Visto che purtroppo per ora non mi sono avvicinato al carbon ed è uno dei pochi che mi manca sicuramente mi metterò all'opera anche io a breve :ghghgh:

Cmq sia ma sei passato dal simulatore all'iphone grazie a cidya o hai acquistato la licenza pakketto dev per poter trasferire su iphone le tue applicazioni?

iMac 27" , iPhone 4s 16gb , iPod Photo 4Th GEN 20GB

Link al commento
Condividi su altri siti

Se ho capito bene mi dici di deallocare la memoria occupata dall'immaigne "inizioX.png" per allocare al suo posto "fineX.png".

penso di aver gia fatto un tentativo, ovvero faccio una cosa di questo genere

[image[X].image dealloc];   //dealloco vecchia immagine
.....         //proseguo assegnando la nuova immagine

ma anche così crasha. non so se le istruzioni per deallocare sono giuste in quanto ancora non ho ben chiara la gestione dei puntatori in questo linguaggio.

Link al commento
Condividi su altri siti

Non puoi allocare tutto l'array con tutte le immagini ci sono, se sono pesanti non hai sufficiente memoria per allocare tutto.

image[X] .image= [uIImage imageNamed:[[NSString alloc] initWithFormat:@"fine%d.png", X ]];

se allochi le immagini così allora NON devi fare questo

[image[X].image dealloc]; //dealloco vecchia immagine
perché deallochi una zona di memoria che non è tua. è sufficiente assegnare la nuova immagine.

nella prima istruzione c'è un altro errore:

[[NSString alloc] initWithFormat:@"fine%d.png", X ]

così perdi ram per ogni stringa perché non la liberi correttamente.

devi usare

[NSString stringWithFormat:@"fine%d.png", X ]

puoi provare cercare i leakage di ram usando la funzione build and analyze di xcode 3.2

il Mio Sito

i miei software:--Dvd Hunter | Game Hunter | Book Hunter | Hunter Touch

 MacBook Pro 15" i7  iMac Alu  iPod touch 4°

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...