我的问题是关于在+ planet中创建的对象的范围.我被告知"自动释放的对象将在它们创建的方法/函数的持续时间内保持不变"在我的示例中,我假设行星实例的范围在main()内,而不是在我执行的方法中初始的alloc/init?
+(Planet *) planet {
gPlanetCount++;
return [[[self alloc] init] autorelease];
}
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Planet *outerMost;
outerMost = [Planet planet];
...
... some code
...
[pool drain];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Planet *outerMost;
outerMost = [[Planet planet] retain]; // Added retain
...
... some code
...
[outerMost release]; // …Run Code Online (Sandbox Code Playgroud) 最初我认为下面提供的代码是有效的,"inBuffer"似乎正确地获得了4字节的数据,而且变量MDD_times也是正确的.
NSData *inBuffer;
float MDD_times;
// FLOAT_002
inBuffer = [inFile readDataOfLength:sizeof(float)];
[inBuffer getBytes: &MDD_times length:sizeof(float)];
NSLog(@"Time: %f", MDD_times);
Run Code Online (Sandbox Code Playgroud)
好的,让我扩展这个小(上面的代码更新),这是我得到的:
inBuffer = <3d2aaaab>
MDD_times = -1.209095e-12 (this will be 0.0416667 bigEndian)
NSLog(@"Time: %f", MDD_times) = Time: -0.000000
Run Code Online (Sandbox Code Playgroud)
它可能是不能容纳浮点值的NSLog,我将浮点数中的字节翻转到bigEndian,预期值"0.0416667"显示就好了.至少我知道NSData> float位正在按预期工作.
加里
以下代码编译好......
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// VARIABLES
MDD *MDD_structure;
NSString *mddFile = @"/Users/Gary/Code/Mdd/xTest.mdd";
NSFileHandle *inFile;
NSData *inBuffer;
int MDD_fCount;
int MDD_vCount;
// OPEN FILE ON DISK
inFile = [NSFileHandle fileHandleForReadingAtPath:mddFile];
if(inFile == nil) NSLog(@"FILE: Open ... ERROR");
else NSLog(@"FILE: Open ... OK");
// READ FRAME COUNT
inBuffer = [inFile readDataOfLength:sizeof(int)];
[inBuffer getBytes:&MDD_fCount length:sizeof(int)];
MDD_fCount = CFSwapInt32BigToHost(MDD_fCount);
NSLog(@"FC: %d", MDD_fCount);
Run Code Online (Sandbox Code Playgroud)
但是当我通过静态分析器"CLANG LLVM 1.0"运行时,我得到以下内容......
warning: Pass-by-value argument in function call is …Run Code Online (Sandbox Code Playgroud) 我正在开发一个基于应用程序标签栏的简单应用程序,它有两个视图.第一个是主应用程序,第二个是简单的指令屏幕.我想要做的是在第二个屏幕上更新标签,因为主应用程序中的内容发生了变化.因为第二个屏幕只有一个标签和一些文本很简单,所以一旦加载它我就不会卸载它.在第一个viewDidLoad之后,我可以很好地更新标签,但之后有一种方法可以从标签栏菜单中捕获连续的视图切换(当视图未加载时),这样我可以在下次交换视图时更新标签?
非常感谢
加里
我试着写下面而不使用点符号...
[scrollView setMinimumZoomScale: scrollView.bounds.size.width / image.size.width];
Run Code Online (Sandbox Code Playgroud)
这是正确的吗?
[scrollView setMinimumZoomScale: [scrollView bounds].size.width / [image size].width];
Run Code Online (Sandbox Code Playgroud)
欢呼加里.