註冊
登錄
論壇首頁
軟體介紹
軟體發表
本站搜尋
線上幫助
小遊戲專區
簽到拿金幣
私人消息 (0)
公共消息 (0)
論壇任務 (0)
系統消息 (0)
好友消息 (0)
帖子消息 (0)
iDevTW - iPhone/iPad iOS開發者論壇
»
iPhone/iPad 軟體設計
» 如何寫百M以上的檔案?
返回列表
回覆
發文
nat
發短訊
加為好友
nat
當前離線
UID
1462
帖子
31
精華
0
積分
154
閱讀權限
20
在線時間
64 小時
註冊時間
2009-9-15
最後登錄
2011-6-30
新生入學
UID
1462
帖子
31
精華
0
積分
154
威望
42
K 幣
112 金
機型
越獄
最後登錄
2011-6-30
1
#
列印
字體大小:
t
T
發表於 2010-3-11 19:58
|
只看該作者
如何寫百M以上的檔案?
各位好,我現有一個程式可以從網路上load資料,而且資料量不小,會有100MB以上,我現在用NSFileManage產生一個檔案後,再用NSFileHandle將後續載下來的資料加在後面,我是每10M寫一次,發現到只要寫超過30m系統就會再立刻alloc 30M,直到最後記憶體不足,就掛了,當我再去查看file時,己經有掛掉之前寫的部分在還存在,我應該要怎麼做才可以將己經寫入的記憶體釋放?要不然都無法寫大的file?以下是我的code,請各位幫幫忙!
if([[NSFileManager defaultManager] fileExistsAtPath:[self dataFilePath:@"Test"]]==NO)
{
[[NSFileManager defaultManager] createFileAtPath:[self dataFilePath:@"Test" ] contents:[NSData dataWithBytes:WriteFileBuf length:tlv->value] attributes:nil];
}
else
{
NSFileHandle *file = [NSFileHandle fileHandleForUpdatingAtPath:[self dataFilePath:@"Test"]];
[file seekToEndOfFile];
[file writeData:[NSData dataWithBytes:WriteFileBuf length:tlv->value]];
[file synchronizeFile];
[file closeFile];
file = nil;
}
複製代碼
收藏
[會心一笑]:
回覆
引用
musicchamber
暱稱:
流浪者
發短訊
加為好友
musicchamber
(流浪者)
當前離線
UID
354
帖子
61
精華
1
積分
341
閱讀權限
20
來自
藍星
在線時間
43 小時
註冊時間
2009-4-1
最後登錄
2012-1-25
小試牛刀
UID
354
帖子
61
精華
1
積分
341
威望
95
K 幣
246 金
機型
越獄
性別
男
來自
藍星
最後登錄
2012-1-25
2
#
發表於 2010-3-12 08:04
|
只看該作者
iPhone的記憶體運作空間應該沒那麼大,或許試試看每1MB寫入一次。
[會心一笑]:
回覆
引用
TOP
wilson_wanf55
發短訊
加為好友
wilson_wanf55
當前離線
UID
1468
帖子
433
精華
1
積分
1713
閱讀權限
40
在線時間
180 小時
註冊時間
2009-9-17
最後登錄
2012-1-31
實習記者
UID
1468
帖子
433
精華
1
積分
1713
威望
487
K 幣
1226 金
機型
越獄
最後登錄
2012-1-31
3
#
發表於 2010-3-12 08:57
|
只看該作者
基本上iPhone上完它自已的os之后可用的空間也差不多剩30M~40M的空間,(雖然有清空間的軟體號稱可以弄出70M的空間),不過我一般還是以10M為最大的基準點,所以我建議別一次下滿,因為讓OS有空間去處理它本身的記憶體的需求。
回覆
引用
TOP
cjlin
發短訊
加為好友
cjlin
當前離線
UID
350
帖子
206
精華
1
積分
324
閱讀權限
20
在線時間
67 小時
註冊時間
2009-3-31
最後登錄
2011-6-22
小試牛刀
UID
350
帖子
206
精華
1
積分
324
威望
247
K 幣
77 金
機型
越獄
最後登錄
2011-6-22
4
#
發表於 2010-3-12 10:09
|
只看該作者
嗯~這麼說好了,
建議你自己處理alloc/free,不要讓autorelease pool幫你,
不然你用多少自己沒辦法掌握
[會心一笑]:
回覆
引用
TOP
cjlin
發短訊
加為好友
cjlin
當前離線
UID
350
帖子
206
精華
1
積分
324
閱讀權限
20
在線時間
67 小時
註冊時間
2009-3-31
最後登錄
2011-6-22
小試牛刀
UID
350
帖子
206
精華
1
積分
324
威望
247
K 幣
77 金
機型
越獄
最後登錄
2011-6-22
5
#
發表於 2010-3-12 10:09
|
只看該作者
本帖最後由 cjlin 於 2010-3-12 10:14 編輯
嗯~這麼說好了,
建議你自己處理alloc/release,不要讓autorelease pool幫你,
不然你用多少自己沒辦法掌握
簡單來說,就是把dataWithBytes換成initWithBytes,然後用完馬上release
[會心一笑]:
回覆
引用
TOP
nat
發短訊
加為好友
nat
當前離線
UID
1462
帖子
31
精華
0
積分
154
閱讀權限
20
在線時間
64 小時
註冊時間
2009-9-15
最後登錄
2011-6-30
新生入學
UID
1462
帖子
31
精華
0
積分
154
威望
42
K 幣
112 金
機型
越獄
最後登錄
2011-6-30
6
#
發表於 2010-3-23 19:14
|
只看該作者
感謝各位的回答,問題就在autorelease pool,我那段code是寫在NSThread裡,如果是自己aloooc/release就沒問題,要不然就要呼叫[pool drain];然後再pool = [[NSAutoreleasePool alloc] init],才會清掉。
[會心一笑]:
回覆
引用
TOP
返回列表
不分類討論
App 作品發表
iPhone 程式範例研究
IDP申請/帳務/推廣與銷售
每日簽到
OpenGLES/Cocos2d/Unity 遊戲設計
徵才/毛遂自薦
開發者活動
建議與站務公告
iPhone4/iPad酷樂誌讀者服務區
站務討論
建議與站務公告
iPhone4/iPad酷樂誌讀者服務區
開發者活動
每日簽到
新人報到區
蘋果開發
iPhone/iPad 軟體設計
Mac OSX/Win 應用開發
OpenGLES/Cocos2d/Unity 遊戲設計
iPhone 程式範例研究
IDP申請/帳務/推廣與銷售
休閒娛樂
作品與經驗分享
App 作品發表
個人作品專頁
iOS開發甘苦談
綜合其它
不分類討論
跳蚤市場
徵才/毛遂自薦
疑難雜症區
[收藏此主題]
[關注此主題的新回覆]
[通過 QQ、MSN 分享給朋友]
Facebook粉絲