gpt4 book ai didi

iphone - 为什么我的数组实例超出范围?

转载 作者:行者123 更新时间:2023-12-03 17:30:52 25 4
gpt4 key购买 nike

有人可以告诉我为什么我的数组超出范围吗?这是我的类(class):

// Paper.h
@interface Paper : NSObject {
NSMutableArray* items;
}

@property (retain) NSMutableArray* items;

// Paper.m
#import "Paper.h"
@implementation Paper {
@synthesize items;
}

// ParserUtil.m
@implementation ParserUtil {
+(Paper*) parsePaper:(NSString*)file {
...
Paper* paper = [[[Paper alloc] init] autorelease];
// does the following line is the best practice?
paper.items = [[[MutableArray alloc] init] autorelease];

Item* item = ...; // create item instance
[paper.items addObject:item];

return paper;
}

// call the parser method
...
Paper* paper = [[ParserUtil parsePaper:@"SomeFile"] retain];
// when run to this line, the paper.items is out of scope
// seems all the items in the array are dispear
NSMutableArray* items = paper.items;
...

有人可以指出这里出了什么问题吗?非常感谢!

最佳答案

事实并非如此。

对象不能超出范围,因为对象没有范围。它们可能是无法访问的,当没有任何变量保存对象的指针时就会发生这种情况。

变量可能超出范围。您只能在声明变量的同一范围内使用变量;您不能开始复合语句、声明变量、完成复合语句和使用该变量,也不能在一个函数或方法中声明变量,然后在另一个函数或方法中使用它。

你在 your other question 中说过这是调试器告诉您变量超出范围。这意味着两个三件事之一:

  1. 该变量确实超出了范围。移动变量或移动使用它的代码,或者只是提前中断调试器(如果需要,可以使用断点)。
  2. 调试器只是愚蠢的。这种情况经常发生。尝试使用 po 命令或在代码中添加 NSLog 语句。
  3. 您正在尝试检查属性访问表达式。根据定义,属性访问表达式必须发送访问器消息,这可能会产生副作用;因此,调试器不会仅在您将鼠标悬停在表达式上时执行此操作,因为这很容易意外执行。您必须在调试器控制台中使用 po 命令发送访问器消息并打印结果的描述。

关于iphone - 为什么我的数组实例超出范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4177662/

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