NSArray "out of scope"
.h
@property (nona开发者_运维百科tomic, 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];
}
I use breakpoint and found array is normal,but m_plistData has no values,shows "out of scope",I can't understand why nn can get normal values
array
is a local reference variable. It just lasts until viewDidLoad
method. Now,
m_plistData = array;
The above statement doesn't make a deep copy. It is just a shallow copy.
- (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.
If your objective is have elements in m_plistData
, directly do -
m_plistData = [[NSArray alloc]initWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14", nil];
Try something like:
m_plistData = [array copy];
Do it like this as you have a NSAarray
:
if(array)
{
m_plistData = [NSArray arrayWithArray:array];
}
精彩评论