Sab*_*a B 81 macos attributes memory-management objective-c ios
我是Objective C的新手.我有C的基本知识,包括指针的概念.我有两个基本问题:
Jos*_*zzi 123
更新了更改文档的答案
现在,这些信息分散在文档中的几个指南中.这是一个必读的列表:
现在,这个问题的答案完全取决于您是使用ARC管理的应用程序(新项目的现代默认设置)还是强制手动内存管理.
赋值与弱 - 使用assign设置属性指向对象地址的指针,而不保留它或以其他方式策划它; 如果取消分配分配给它的对象,则使用weak使属性自动指向nil.在大多数情况下,如果不进行适当的清理,你将需要使用弱,因此你不会尝试访问一个解除分配的对象(非法访问内存地址 - " EXC_BAD_ACCESS").
保留与复制 - 声明的属性默认使用retain(因此您可以完全省略它)并自动管理对象的引用计数,无论是将另一个对象分配给属性还是将其设置为nil; 使用copy自动向新分配的对象发送一条-copy消息(它将创建传递的对象的副本并将该副本分配给该属性 - 在某些情况下有用(甚至是必需的),在这种情况下,被指定的对象在被设置为某个其他对象的属性(这意味着修改/变异也适用于该属性).
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"First",@"Second", nil];
NSMutableArray *copiedArray = [array mutableCopy];
NSMutableArray *retainedArray = [array retain];
[retainedArray addObject:@"Retained Third"];
[copiedArray addObject:@"Copied Third"];
NSLog(@"array = %@",array);
NSLog(@"Retained Array = %@",retainedArray);
NSLog(@"Copied Array = %@",copiedArray);
array = (
First,
Second,
"Retained Third"
)
Retained Array = (
First,
Second,
"Retained Third"
)
Copied Array = (
First,
Second,
"Copied Third"
)
Run Code Online (Sandbox Code Playgroud)
小智 5
分配
\n\n复制:
\n\n保持:
\n\n