作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 ARC 的带有 NSArray 属性的类,没有什么花哨的......
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
property(nonatomic, strong) (NSArray *) myArray;
@end
#import "MyClass.h"
@implementation MyClass
@synthesize myArray = _myArray;
@end
如果尝试使用另一个类内部的方法来尝试设置该数组,如果仅传递该数组,则不会设置它;但是,如果类(class)通过,它确实会设置,我不确定为什么会这样......
尝试这两种方式的代码如下...
MyClass *myClass = [[MyClass alloc] init];
[self setArrayByPassingArray:myClass.myArray];
NSLog (@"%@", myClass.myArray)
//result is null
[self setArrayByPassingClass:myClass];
NSLog (@"%@", myClass.myArray)
//result is test, test2...
-(void)setArrayByPassingArray:(NSArray *)arrayToSet {
arrrayToSet = [[NSArray alloc] initWithObjects: @"test", @"test2", nil];
}
-(void)setArrayByPassingClass:(MyClass *)classWithArrayToSet {
classWithArrayToSet.myArray = = [[NSArray alloc] initWithObjects: @"test", @"test2", nil];
}
我尝试了一些仅使用字符串的其他方法,但字符串没有改变,所以我不确定如果包含它们的类被传递,为什么它们会被改变...
最佳答案
第一个示例中的 setArrayByPassingArray:
方法将新创建的 NSArray
分配给它的参数,该参数通过值<传递/em>,并在退出方法时立即丢弃。这里发生的是在调用 setArrayByPassingArray:
之前创建了对 myArray
的引用的副本(不是数组的副本,只是对该数组的引用的副本) .该副本不再附加到 MyClass
的 myArray
成员。
您的第二个示例没有传递类 - 它传递了该类的一个实例,然后它正确地使用点表示法在您的实例中分配 myArray
属性.这就是第二个示例有效而第一个示例无效的原因。
如果您在整个程序中使用 NSMutableArray
而不是 NSArray
,您可以重写您的第一个示例以使其工作:
-(void)setArrayByPassingArray:(NSMutableArray *)arrayToSet {
[arrrayToSet setArray:[[NSArray alloc] initWithObjects: @"test", @"test2", nil]];
}
关于objective-c - NSArray 仅在类通过时才更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10158472/
我是一名优秀的程序员,十分优秀!