·H
@property (nonatomic, retain) NSArray *m_plistData;
的.m
@synthesize m_plistData;
- (void)viewDidLoad
{
NSArray *array = [[NSArray alloc]initWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14", nil];
m_plistData = array;
NSArray *nn = m_plistData;
[super viewDidLoad];
}
我使用断点并发现数组是正常的,但是m_plistData没有值,显示“超出范围”,我无法理解为什么nn可以得到正常值
答案 0 :(得分:0)
array
是一个本地引用变量。它只持续到viewDidLoad
方法。现在,
m_plistData = array;
上述声明不做深刻的复制。这只是一个浅薄的副本。
- (void)viewDidLoad
{
NSArray *array = [[NSArray alloc]initWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14", nil];
m_plistData = array;
NSArray *nn = m_plistData;
[super viewDidLoad];
} // Both the array, nn references cease to exist after this point.
// So having references to it leads to run-time exception if used else where.
如果您的目标是m_plistData
中的元素,请直接执行 -
m_plistData = [[NSArray alloc]initWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14", nil];
答案 1 :(得分:0)
尝试类似:
m_plistData = [array copy];
答案 2 :(得分:0)
这样做,因为你有一个NSAarray
:
if(array)
{
m_plistData = [NSArray arrayWithArray:array];
}