Tôi đang chạy một mainloop trong Cocoa sử dụng một NSTimer thiết lập như thế này:Thay đổi NSTimer khoảng cho lặp lại timer
mainLoopTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/fps target:self selector:@selector(mainloop) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:mainLoopTimer forMode:NSEventTrackingRunLoopMode];
Lúc khởi động Chương trình tôi đặt timeInterval đến 0.0 để các mainloop chạy càng nhanh càng tốt. Dù sao, tôi muốn cung cấp một chức năng để thiết lập tốc độ khung hình (và do đó khoảng thời gian của bộ đếm thời gian) đến một giá trị cụ thể khi chạy. Thật không may như xa như tôi biết đó có nghĩa là tôi phải khởi tạo lại bộ đếm thời gian kể từ Cocoa không cung cấp một chức năng như "setTimerInterval" Đây là những gì tôi đã cố gắng:
- (void)setFrameRate:(float)aFps
{
NSLog(@"setFrameRate");
[mainLoopTimer invalidate];
mainLoopTimer = nil;
mainLoopTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/aFps target:self selector:@selector(mainloop) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:mainLoopTimer forMode:NSEventTrackingRunLoopMode];
}
nhưng điều này ném các lỗi sau và dừng mainloop :
2010-06-09 11: 14: 15,868 myTarget [7313: a0f] setFrameRate 2010/06/09 11: 14: 15,868 myTarget [7313: a0f] * __NSAutoreleaseNoPool(): Object 0x40cd80 của class __NSCFDate autoreleased không có pool tại chỗ - chỉ rò rỉ 2010-06-09 11: 14: 15.869 myTarget [7313: a0f] * __NSAutoreleaseNoPool(): Object 0x40e700 của lớp NSCFTimer autoreleased không có hồ bơi tại chỗ - chỉ rò rỉ 0,614628
Tôi cũng đã cố gắng để tái tạo bộ đếm thời gian bằng cách sử dụng "giữ lại" từ khóa, nhưng điều đó không thay đổi bất cứ điều gì. Bất kỳ ý tưởng nào về cách tự động thay đổi khoảng thời gian của một NSTimer trong thời gian chạy?
Cảm ơn!
tôi nên làm gì để thay đổi khoảng thời gian? – moka
Tôi cầu xin sự tha thứ của bạn. Tôi đã đọc sai [mainLoopTimer release]. Bạn đang hoạt động chính xác với bộ hẹn giờ, nhưng dường như không có AutoReleasePool tại chỗ. có một cái nhìn ở đây: http://developer.apple.com/mac/library/documentation/cocoa/conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html – garph0
hmm Tôi allready đã cố gắng để đặt một autoreleasepool tại chỗ, nhưng nó không hoạt động , nhưng tôi sẽ thử lại! – moka