我很難理解爲什麼這會消耗內存。
我試過了;
- 允許ARC更多的時間來清理
- 創建全局的__weak副本傳遞
- 看着使用__bridge或__bridge_transfer,但我不認爲這是適當的。
- 使全局公共和直接引用它(作品,但不切實際的)
這個iOS的目標C線是從Java應用程序通過j2objc 0.9.3翻譯。
@implementation Comms_StatusThread
- (void)run {
while (true) {
// Consumes memeory at aproximately 100k per 5 min
[S globals];
@try {
[JavaLangThread sleepWithLong:10];
}
@catch (JavaLangInterruptedException *e) {
}
}
此翻譯靜態單店「全局」,以從應用程序的任何地方進行訪問(真正的代碼存儲更多的類&回調)。
@implementation S
Globals * S_globals__ = nil;
+ (Globals *)globals {
{
if (S_globals__ == nil) S_globals__ = [[Globals alloc] init];
return S_globals__;
}
}
@end
任何幫助表示讚賞。我是Objective-C和ARC的新手。我在ARC上閱讀過相當多的內容,但仍不明白這種內存消耗的原因。
感謝學生T我試了下面。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(test:) userInfo:nil repeats:YES];
return YES;
}
-(void) test: (NSObject*) o {
[S comms];
[S globals];
}
這不佔用內存,我打算這樣做不過tball的新的答案(使用j2objc @AutoreleasePool)顯然是最好的選擇,所以我會從那裏開始。
非常感謝您的答覆!
+1對於您的嘗試 – SmallChess 2014-08-29 04:45:20
「允許更多時間用於ARC清理」我不認爲ARC以您認爲的方式工作。 ARC在編譯時只是爲你插入發行版本。它不像Java那裏有一個垃圾回收器可以掃描並釋放事物。 – 2014-08-29 05:33:54