gpt4 book ai didi

ios - 将 NSArray 对象分配给其他 NSArray 对象是否正确?

转载 作者:行者123 更新时间:2023-11-28 21:30:05 24 4
gpt4 key购买 nike

只是对提高项目中的代码质量感到困惑。将 NSArray 对象分配给另一个 NSArray 对象是正确的方法吗?但我还没有分配一个 NSArray 对象。

它就在代码下面吗?内存管理有问题吗?

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic, weak) NSArray *array1;

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
NSArray *array2 = [[NSArray alloc] initWithObjects:@"A",@"B",@"C", nil];

NSLog(@"array2 count : %lu",(unsigned long)array2.count);

self.array1 = array2;

NSLog(@"array1 count : %lu",(unsigned long)self.array1.count);


// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end

Output :-
2016-04-06 22:22:56.057 PhotoViewer[969:56203] array2 count : 3
2016-04-06 22:22:56.057 PhotoViewer[969:56203] array1 count : 3

我的问题,array1 对象是否需要分配?

Ex : self.array1 = [[NSArray alloc] init];
self.array1 = array2;

最佳答案

您的问题涉及一个核心主题,在使用任何语言进行编程时理解该主题都至关重要 - 引用 之间的区别 类型 和 < em>语义。

总结:对于两个值类型变量之间的赋值,用于表示值的实际位被复制,并且在赋值之后两个变量之间没有联系 - 改变一个不会影响另一个。由于这些位直接存储在变量中,因此无需为它们分配单独的存储空间。在 Objective-C 中,double 等类型是值类型。

对于引用类型,用于表示值的位存储在与变量不同的存储中,并且此不同存储的地址就是存储在变量中的内容。赋值复制这个地址,所以在赋值后两个变量引用相同的值。对于可变值,通过一个变量改变值也会影响另一个变量看到的内容。引用类型的存储需要与变量分开管理,当需要新的不同值时,需要分配新的存储空间,并将值位复制到其中。每个不同的值通常称为一个对象。例如,在 Objective-C 中 NSString 是一个不可变的引用类型,而 NSMutableArray 是一个可变的。在任何一种情况下,新的不同对象都是使用 alloc/initnew 等创建的。简单的分配导致共享。

在您的示例中,赋值共享一个不可变数组,无需alloc 副本。

这方面写了很多,这里有一些slides来自一所解释得很清楚的大学。

HTH

关于ios - 将 NSArray 对象分配给其他 NSArray 对象是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36457666/

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