我是objective-c的新手,我正在努力理解内存管理以使其正确.
在阅读了
针对Cocoa的优秀内存管理编程指南之后,我唯一担心的是在iphone/ipod应用程序中实际释放自动释放的对象.我的理解是在运行循环结束时.但是什么定义了应用程序中的运行循环?
所以我想知道下面的代码是否正确.假设一个对象
@implementation Test
- (NSString *) functionA {
NSString *stringA;
stringA = [[[NSString alloc] initWithString:@"Hello"] autorelease]
return stringA;
}
- (NSString *) functionB {
NSString *stringB;
stringB = [self functionA];
return stringB;
}
- (NSString *) functionC {
NSString *stringC;
stringC = [self functionB];
return stringC;
}
- (void)viewDidLoad {
[super viewDidLoad];
NSString* p = [self functionC];
NSLog(@"string is %@",p);
}
@end
Run Code Online (Sandbox Code Playgroud)
这段代码有效吗?
从Apple文本据我所知,从NSString的返回泛函是在范围内有效functionB.我不确定它在functionC和viewDidLoad中是否有效. …
iphone cocoa-touch memory-management objective-c autorelease
在下面的一段代码中(来自一本书),数据是NSDictionary*数据; 在标题中定义(没有属性).
在控制器的viewDidLoad中,会发生以下情况:
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *keys = [NSArray arrayWithObjects:@"home", @"work", nil];
NSArray *homeDVDs = [NSArray arrayWithObjects:@"Thomas the Builder", nil];
NSArray *workDVDs = [NSArray arrayWithObjects:@"Intro to Blender", nil];
NSArray *values = [NSArray arrayWithObjects:homeDVDs, workDVDs, nil];
data = [[NSDictionary alloc] initWithObjects:values forKeys:keys];
}
Run Code Online (Sandbox Code Playgroud)
由于我对Objective-c真的很新,有人可以向我解释为什么在退出函数之前我不必保留变量键,homeDVD,workDVD和值?我希望之前的数据分配类似于:
[keys retain];
[homeDVDs retain];
[workDVDs retain];
[values retain];
Run Code Online (Sandbox Code Playgroud)
或不?InitWithObjects是否(递归地)将所有对象复制到新表中?
假设我们没有最后一行(数据分配),我们应该释放所有NSArrays退出函数之前(或者我们可以安全地假定所有NSArrays将被自动释放,因为没有页头为每一个?)
谢谢!!!!
我有以下文件:
~$ od file.txt
0000000 000012
0000001
Run Code Online (Sandbox Code Playgroud)
我希望能够在bash脚本中确保文件包含这些内容.我想避免perl,并希望使用标准的unix工具,包括od/sed/awk/tr等.
你能推荐一个干净利落的方式吗?