2 din 2
2
Performante afisare thumburi din libraria locala.
  [ Ignoră ]   [ # 16 ]
Avatar
RankRankRankRank
Moderator
Din: Cluj-Napoca
Macuser din: 26.01.06

Uite ca la asta chiar nu m-am gandit, n-am crezut ca are importanta de unde creezi threadul. Am vrut sa nu tin in cache imagini mai multe decat sunt afisate pentru ca mai tarziu o sa am nevoie de memorie si sa nu fiu nevoit sa ma intorc aici sa curat, si de-asta am pus codul direct in cell.
Am de recuperat, trebuie sa citesc si despre dispatch_async.

 Semnătură 

Mcintoshing…

Profil
 
  [ Ignoră ]   [ # 17 ]
Avatar
RankRankRankRank
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06

Eu cand vad ca UI-ul e blocat la asta ma gandesc prima data, ceva blocheaza main thread-ul si ma uit direct la elementele UI.
Legat de cache-ul imaginilor eu cred ca e mai bine sa fie incarcate, acum depinde cat de multe sunt…

 Semnătură 

A man should look for what is, and not for what he thinks should be.—Albert Einstein

Profil
 
  [ Ignoră ]   [ # 18 ]
RankRank
Jr. Member
Din: Bucuresti
Macuser din: 26.03.10

avand in vedere ca memoria tre’ refolosita iar in momentul scroll-ului tu tot aloci si de-aloci memorie pentru imagini, pentru thumb-uri (presupunand ca sunt de dimensiuni mai mici), as folosi totusi + (UIImage)imageWithName:(NSString *)name. keep it simple! nu cred ca e un lucru rau sa ai un cache de imagini. daca totusi ai nevoie sa le incarci asincron, nu inteleg de ce nu asimilati exemplele de la Apple (sunt de parere ca totusi isi cunosc mai bine framework-ul decat il cunoastem noi!!!)

http://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html

 Semnătură 

 iPhone 5 16GB black, iOS 7 beta 5
 MacBook Pro 15” Unibody, Late 2011 2,4 Ghz Intel Core i7, 8GB RAM, 128GB SSD, Radeon 6770 1GB, HiRes Display, OS X 10.8.3
 Thunderbolt Display

Profil
 
  [ Ignoră ]   [ # 19 ]
Avatar
RankRankRankRank
Moderator
Din: Cluj-Napoca
Macuser din: 26.01.06

Bun, deci am adoptat si metoda cu un model mai separat, adica in loc sa creez un thread nou din cell il creez din model, care e in controller, deci tot prin UI trece orice ai face. Acum pentru ca le si cacheuieste merge bine dupa ce s-au incarcat toate, dar la primul scroll tot sacadeaza. Pentru un tabel simplu nu e nicio problema, dar cand sunt cate 4 pe linie se cam simte.
Solutia ar fi in exemplul pe care l-a pus VladN, acolo incarca imaginile doar dupa ce te-ai oprit din scroll.

Inca sunt nedumerit cum au facut apple la Photos, acolo poti sa scrollezi ca nebunu prin mii de poze ca nu se simte nimic si nici nu apar cu intarziere, deci ori sunt cacheuite in avans toate ori tot imi scapa ceva.

 Semnătură 

Mcintoshing…

Profil
 
  [ Ignoră ]   [ # 20 ]
Avatar
RankRankRankRank
Moderator
Din: Cluj-Napoca
Macuser din: 26.01.06

Ouch, my bad, uitasem de dispatch_async, acum functioneaza cum trebuie. Singura chestie, dar care nu ma deranjeaza asa tare, este ca thumburile locale apar cu o mica intariere.

 Semnătură 

Mcintoshing…

Profil
 
  [ Ignoră ]   [ # 21 ]
Avatar
RankRankRankRank
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06

Poti sa faci un mic screencast? sunt curios cum se misca.

 Semnătură 

A man should look for what is, and not for what he thinks should be.—Albert Einstein

Profil
 
  [ Ignoră ]   [ # 22 ]
Avatar
RankRankRankRank
Moderator
Din: Cluj-Napoca
Macuser din: 26.01.06

Ai vazut si al doilea post sau vrei sa vezi delayul? Mai degraba te adaug in testflight, da-mi emailul pe privat daca vrei. Altfel eu sper ca sapt asta o trimit spre review aplicatia.

 Semnătură 

Mcintoshing…

Profil
 
  [ Ignoră ]   [ # 23 ]
Avatar
RankRankRank
Member
Din: Ploiesti
Macuser din: 06.12.11
.ral:cr - 17 Aprilie 2013 10:38 AM

Ouch, my bad, uitasem de dispatch_async, acum functioneaza cum trebuie. Singura chestie, dar care nu ma deranjeaza asa tare, este ca thumburile locale apar cu o mica intariere.

Banuiesc ca ai utilizat

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT0

In felul asta , cind dispatch_async() are treaba cu I/O poate fi pus in pauza de OS , motiv pentru care , atunci cand vede ca o actiune a sa este blocata , initiaza alta cerere si tot asa .
Incearca sa utilizezi ceva de genul

dispatch_queue_t myQ;
queue dispatch_queue_create("com.example.MyQ"NULL); 

Ca sa scapi de ea folosesti

dispatch_release (myQ

in dealloc sau unde crezi tu ca este cazul .

“A serial queue executes only one task at a time and always pulls tasks from the head of the queue. You might use a serial queue instead of a lock to protect a shared resource or mutable data structure. Unlike a lock, a serial queue ensures that tasks are executed in a predictable order. And as long as you submit your tasks to a serial queue asynchronously, the queue can never deadlock”

vezi aici

 Semnătură 


MacBook Pro 15”  i7 2.2GHz/ 16GB/ 500GB SSD ,  10.11
MacBook Air 13”  i5 1.3GHz/ 4GB/ 256GB SSD ,  10.11

Profil
 
  [ Ignoră ]   [ # 24 ]
RankRank
Jr. Member
Din: Bucuresti
Macuser din: 26.03.10

http://docs.nimbuskit.info/index.html

 Semnătură 

 iPhone 5 16GB black, iOS 7 beta 5
 MacBook Pro 15” Unibody, Late 2011 2,4 Ghz Intel Core i7, 8GB RAM, 128GB SSD, Radeon 6770 1GB, HiRes Display, OS X 10.8.3
 Thunderbolt Display

Profil
 
   
2 din 2
2