开发者

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];
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜