gpt4 book ai didi

ios - 传递给不同类中的方法时,Objective-C NSArray 无法更改

转载 作者:太空宇宙 更新时间:2023-11-04 06:28:06 24 4
gpt4 key购买 nike

我有一个 NSArray,我需要更改其中各项的顺序。我写了一个方法来确定新顺序:

+(NSArray*)sortProxyForms:(NSArray*)arrayOfForms
{
NSArray* sortedForms = [arrayOfForms sortedArrayUsingComparator:^(HPSModelFormProxy* a, HPSModelFormProxy* b) {

return [@(a.ordinal) compare:@(b.ordinal)]; // @(a.ordinal) aka Boxing turns int into NSNumber

}];

arrayOfForms = [sortedForms copy]; // DOES NOT WORK

return sortedOfForms; // WORKS IF ASSIGNED IN THE CALLER

}

因此,我可以将要排序的 NSArray 传递到方法中。我这样调用方法:

[HPSModelUtilities sortProxyForms:_formProxies];

如果我真的尝试在方法中设置 arrayOfForms(对 _formProxies 的引用),那么一旦我从该方法返回,数组就不会改变。

但是,如果我从方法中返回排序后的数组并将其分配给调用方法中的 NSArray,则分配有效:

_formProxies = [HPSModelUtilities sortProxyForms:_formProxies]; // _formProxies NSArray is changed

_formProxies 在调用类中声明,“HPSModelUtilities”是一个不同的类。

为什么 NSArray 可以在调用者中更改,但在被调用方法中却不能更改,即使它是通过引用传递的?

最佳答案

当您将值传递给方法时,它会被复制。这称为“按值传递”。您传入的 arrayOfForms 是指向 NSArray指针。这意味着指针在传入时被复制。将此指针重定向到 NSArray 的另一个实例不会改变原始指针指向的位置。

我会将您的方法重命名为 (NSArray*)sortedArrayFromProxyForms:(NSArray*)proxyForms

如果你真的想改变你的 NSArray 引用在方法中指向的位置。这样做。

+ (void)sortProxyForms:(NSArray**)proxyForms {
*proxyForms = sortedForms;
}

关于ios - 传递给不同类中的方法时,Objective-C NSArray 无法更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23638868/

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