Objective-C中的属性

问题描述 投票:2回答:3
Line 1: First.h
Line 2: @property (nonatomic, retain) NSString *name;

Line  3: First.m
Line  4: @synthesize name;
Line  5: -(void)viewDidLoad()
Line  6: {
Line  7:     name = [NSString stringWithString:@"Hello"];
Line  8:                          OR
Line  9:     self.name = [[NSString alloc]initWithString:@"Hello"]; 
Line 10:                          OR
Line 11:  }
Line 12:-(void)dealloc()
Line 13: {
Line 14: [name release];
Line 14: } 

问题1:如果我遵循第7行,则一切都很好,如果我使用了第9行,则存在内存泄漏。据我所知,自我是指向当前对象的对象,如果我使用self.object还是仅仅是对象就没有更多区别。

问题2:如果我使用过,则>]

@synthesize name = _name;

然后,哪个用于设置name的值,哪个用于获取name的值?之间的区别:

name = [NSString stringWithString:@"Hello"];
            OR
self.name = [NSString stringWithString:@"Hello"];
            OR
_name = [NSString stringWithString:@"Hello"];

问题3:如果我创建任何属性,那么在分配时显示内存泄漏是否需要在内存中分配?

第1行:First.h第2行:@property(非原子,保留)NSString * name;第3行:First.m第4行:@synthesize名称;第5行:-(void)viewDidLoad()第6行:{第7行:名称= [NSString ...

ios objective-c memory-management synthesize
3个回答
2
投票

问题1:如果我遵循第7行,那么一切都很好,如果我使用了第9行,则存在内存泄漏。据我所知,自我是指向当前对象的对象,如果我使用self.object还是仅仅是对象就没有更多区别。


2
投票
要回答

第一个问题

:之所以会出现泄漏,是因为使用alloc方法初始化字符串时,您将保留创建的对象,但之后不释放该对象,因此在创建时会泄漏带有stringwithString的字符串会得到一个自动释放的对象,该对象由自动释放池自动释放。请注意,在第9行的示例中,您正在初始化对象并将其传递给属性的setter,如果使用ivar ...,则情况将有所不同。要回答

第二个问题


0
投票
首先提供一些背景知识,

MRC

的概念的总结[[only:
© www.soinside.com 2019 - 2024. All rights reserved.