클래스에 대한 정적 참조를 전달하면 메모리가 소모되는 이유는 무엇입니까?
왜 이것이 메모리를 소비하는지 이해하는 데 어려움이 있습니다.
나는 시도했다.
- .
- 전역 공공 만들기 및 직접 참조 (작동하지만 실용적이지)
이 아이폰 OS 목적 C 스레드는 자바 응용 프로그램에서 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에서 상당한 금액을 읽었지 만 여전히이 메모리 소비의 원인을 이해하지 못합니다.
학생 덕분에 나는 다음을 시도했다.
- (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
"ARC를 정리하는 데 더 많은 시간을 허락합니다."나는 ARC가 당신이 생각하는대로 작동한다고 생각하지 않습니다. ARC는 컴파일 타임에 릴리즈를 삽입하기 만하면됩니다. 그것은 Java와는 달리 가비지 컬렉터가 스캔하고 사물을 할당 해제합니다. –