【发布时间】:2011-09-27 13:04:02
【问题描述】:
UIImage API 参考文档:-
initWithContentsOfFile:
使用指定文件的内容初始化并返回图像对象。
- (id)initWithContentsOfFile:(NSString *)path
参数
路径
文件的路径。此路径应包含标识图像数据类型的文件扩展名。
返回值
一个已初始化的 UIImage 对象,如果方法无法找到文件或从其内容初始化图像,则为 nil。
考虑到这种情况,假设我有一个类,它可以是任何类的扩展。以 UIImage 为例。
@interface myImage : UIImage
{
BOOL isDefaultSet;
}
-(id)initWithDefaultImage;
@end
@implementation myImage
-(id)initWithDefaultImage
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"someInvalidImage" ofType:@"png"];
idDefaultSet = YES;
return [self initWithContentsOfFile:path];
}
@end
//somewhere in other class:
NSString *path = [[NSBundle mainBundle] pathForResource:@"someInvalidImage" ofType:@"png"];
myImage *myObject = [[myImage alloc] initWithDefaultImage];
UIImage *yourObject = [[UIImage alloc] initWithContentsOfFile:path];
现在在这两种情况下,
“alloc”给出“retainCount+1”
如果
initWithDefaultImage/initWithContentsOfFile
由于某些问题返回 nil - 可以说(无效的文件路径),此内存将泄漏为
我的对象/你的对象
即使 allocation 是在 init 之前进行的,也会设置为 nil。
我已经看到许多以这种方式扩展类/接口的实现。我很困惑这里是如何处理内存的?任何人都可以分享对此的看法吗?
【问题讨论】:
-
我建议遵守约定,让您的课程以大写字符开头。你会让你的生活更轻松(如果你和其他人一起工作,你会避免被侮辱和殴打;-)
-
亲爱的 DarkDust.. 我只是在讨论这个问题。请不要这么苛刻..!
-
我认为 DarkDust 是在开玩笑,仅此而已。不过,DarkDust 是正确的,正如我通过艰难的方式了解到的那样,类应该大写,ivars 和方法以小写开头。
标签: iphone objective-c ios ipad ios4