[]
objective-c release\autorelease
merhaba arkadaşlar,
Türkçe kaynak fazla olmadığı için ve benim de ingilizcem pek iyi olmadığı için bu memory management olayını pek anlayamadım. daha önce c# kullandığım için böyle şeylerle uğraşmamıştım daha önce :)
şimdi sormak istediğim şey şu: bir harita nesnesi üzerine pin'ler yerleştiriyorum. her pin benim kendi oluşturduğum bir nesne (haritaya yerleştirilen pin nesnesinden türemiş bir nesne). bu nesneleri de başka bir class'ın geri dönüş tipi pin olan bir method'unu çağırarak oluşturuyorum.
bir for döngüsü içinde 10 tane nesne oluşturunca sorun olmuyor ama 1000 tane nesne oluşturduğum zaman program açılıyor ama ekranda biraz hareket ettiğim zaman program sonlandırılıyor. sanırım bunun sebebi memory'nin dolması yüzünden olsa gerek.
tahminime göre bu problemin çözümü de oluşturduğum nesneneri release etmediğim için oluyor. aslında etmek istiyorum ama edemedim bir türlü. çünkü nesneyi bir class içindeki method'da oluşturduğum için return'den önce release etsem olmaz, return'dan sonrasına zaten kod geçmiyor. nesneyi oluşturduğum for döngüsü içinde ise release edemiyorum. autorelease diyorum ama bu autorelease ne işe yarar onu da anlayamadım.
ama aklıma takılan bir başka şey ise, şimdi ben nesnemi oluşturdum, bu nesneyi haritaya koydum ve release ettim diyelim. o zaman haritadaki nesneye tıklandığı zaman o nesneye erişemem sanırım değil mi? ya da galiba benim sorunum release edip etmemekle değil telefonun kısıtlı hafızasına çok yüklendiğim için oluyor.
Türkçe kaynak fazla olmadığı için ve benim de ingilizcem pek iyi olmadığı için bu memory management olayını pek anlayamadım. daha önce c# kullandığım için böyle şeylerle uğraşmamıştım daha önce :)
şimdi sormak istediğim şey şu: bir harita nesnesi üzerine pin'ler yerleştiriyorum. her pin benim kendi oluşturduğum bir nesne (haritaya yerleştirilen pin nesnesinden türemiş bir nesne). bu nesneleri de başka bir class'ın geri dönüş tipi pin olan bir method'unu çağırarak oluşturuyorum.
bir for döngüsü içinde 10 tane nesne oluşturunca sorun olmuyor ama 1000 tane nesne oluşturduğum zaman program açılıyor ama ekranda biraz hareket ettiğim zaman program sonlandırılıyor. sanırım bunun sebebi memory'nin dolması yüzünden olsa gerek.
tahminime göre bu problemin çözümü de oluşturduğum nesneneri release etmediğim için oluyor. aslında etmek istiyorum ama edemedim bir türlü. çünkü nesneyi bir class içindeki method'da oluşturduğum için return'den önce release etsem olmaz, return'dan sonrasına zaten kod geçmiyor. nesneyi oluşturduğum for döngüsü içinde ise release edemiyorum. autorelease diyorum ama bu autorelease ne işe yarar onu da anlayamadım.
ama aklıma takılan bir başka şey ise, şimdi ben nesnemi oluşturdum, bu nesneyi haritaya koydum ve release ettim diyelim. o zaman haritadaki nesneye tıklandığı zaman o nesneye erişemem sanırım değil mi? ya da galiba benim sorunum release edip etmemekle değil telefonun kısıtlı hafızasına çok yüklendiğim için oluyor.
uykusuzluktan sorunu tam idrak edemedim ama ingilizcene kuvvet diyorum :
stackoverflow.com
edit : burada da basic memory management bölümüne bakman yrinde olur
cocoadevcentral.com
stackoverflow.com
edit : burada da basic memory management bölümüne bakman yrinde olur
cocoadevcentral.com
- kimlanbu (11.07.11 10:42:05 ~ 10:44:19)
Teşekkürler, stackoverflow'dakine ingilizcem yetmez sanırım :)
diğeri de tam olarak dediğimi karşılamıyor, youtube'da da bir şeyler varmış. Akşam eve gidince bir de onlara bakayım :)
diğeri de tam olarak dediğimi karşılamıyor, youtube'da da bir şeyler varmış. Akşam eve gidince bir de onlara bakayım :)
- barix (11.07.11 10:47:42)
selam,
"bu nesneleri de başka bir class'ın geri dönüş tipi pin olan bir method'unu çağırarak oluşturuyorum." demissin, metod hangi metod acaba? init veya copy ile baslayan bir metodsa release etmen gerekir. ayrica for dongusunde 1000 tane pin olusturuyorsan autorelease in ise yaramasi icin autoreleasepool olusturmanda fayda var, her seferinde autoreleasepool u da bosalt ki nesne release edilebilsin.
ayrica metodlarin son satirinda return [pin autorelease]; seklinde de gonderdigin nesneyi daha sonra autorelease edilecek sekilde gonderebilirsin.
biraz gecmis uzerinden ama umarim faydasi olur.
"bu nesneleri de başka bir class'ın geri dönüş tipi pin olan bir method'unu çağırarak oluşturuyorum." demissin, metod hangi metod acaba? init veya copy ile baslayan bir metodsa release etmen gerekir. ayrica for dongusunde 1000 tane pin olusturuyorsan autorelease in ise yaramasi icin autoreleasepool olusturmanda fayda var, her seferinde autoreleasepool u da bosalt ki nesne release edilebilsin.
ayrica metodlarin son satirinda return [pin autorelease]; seklinde de gonderdigin nesneyi daha sonra autorelease edilecek sekilde gonderebilirsin.
biraz gecmis uzerinden ama umarim faydasi olur.
- bushwacker (27.04.12 17:10:51)
1