gpt4 book ai didi

ios - Objective-c self 与内存

转载 作者:行者123 更新时间:2023-11-29 12:50:09 26 4
gpt4 key购买 nike

我有一些新手问题:

1) 使用@propreties 和@synthesize 时,是否需要在dealloc 方法中做些什么?或者没有必要? (比如发布或其他)

2)我有类似的东西:

@property (copy, nonatomic) NSString *model; // On prend une copie pour le setter
@property (getter=getDistance, nonatomic) float odometer;

// constructeur doit toujours commencer par init
-(id)initWithModel:(NSString *)newModel {

if(self = [super init]) {
_model = [newModel copy];
_odometer = 10.0;
}

return self;
}

我可以做类似的事情吗:

self.model = [newModel copy];
self.odometer = 10.0;

这里有什么区别?

3) 为什么,对于 NSString*,我们使用复制属性?

 @property(**copy**) && _variable = [newVariable **copy**] .. 

4) 对于一个简单的应用程序(非多线程),我们可以使用非原子来获得最佳性能吗?

提前致谢

最佳答案

  1. 是的,对于 retaincopy属性,必须释放支持变量或必须将属性设置为 nil-dealloc ,除非您使用的是 ARC。
  2. 可以,但官方建议不要在 -init 中使用访问器方法。不同之处在于您的版本直接设置支持变量,绕过您拥有的访问器的任何副作用(包括内存管理!)@synthesize d.但是,我应该指出,如果您不使用 ARC,self.model = [newModel copy];泄漏内存。将其替换为 self.model = [[newModel copy] autorelease];如果您不使用 ARC。这是两者之间区别的完美示例:_model = [newModel copy];不泄漏。
  3. NSString有一个可变的子类,所以你不想 retain传递给您的字符串,后来才发现它发生了变异,而您却不知道!相反,为自己制作一份副本,以确保它不会被外部物体弄乱。
  4. 当然。远远超过 atomic无论如何,线程安全是必需的。

关于ios - Objective-c self 与内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22592909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com