Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 我敢肯定可变范围的问题_Iphone_Objective C_Ios - Fatal编程技术网

Iphone 我敢肯定可变范围的问题

Iphone 我敢肯定可变范围的问题,iphone,objective-c,ios,Iphone,Objective C,Ios,我基本上有一个可变范围的问题。我知道多种编程语言,但有时我就是无法理解obj-c 在我的webviewcontroller类中,我有一个使用self.var调用的变量 我还有一些委托方法引用修改过的UIAlertView。为什么我不能在这些方法中引用self.var,而不会导致整个应用程序崩溃 我什么都试过了,已经有几天了,现在我需要帮助 谢谢 编辑: 下面是代码webviewcontroller.h #import "SBTableAlert.h" @interface We

我基本上有一个可变范围的问题。我知道多种编程语言,但有时我就是无法理解obj-c

在我的webviewcontroller类中,我有一个使用self.var调用的变量

我还有一些委托方法引用修改过的UIAlertView。为什么我不能在这些方法中引用self.var,而不会导致整个应用程序崩溃

我什么都试过了,已经有几天了,现在我需要帮助

谢谢

编辑:

下面是代码webviewcontroller.h

    #import "SBTableAlert.h"

    @interface WebViewController : UIViewController <SBTableAlertDelegate, SBTableAlertDataSource>{
            NSMutableArray *bookmarks;
    }
    @property (nonatomic, retain) NSMutableArray *bookmarks;
后来我试着给self.bookmarks打电话

    - (NSInteger)tableAlert:(SBTableAlert *)tableAlert numberOfRowsInSection:(NSInteger)section {
            return [self.bookmarks count];
    }

我在self.bookmarks计数时遇到的错误是NSInvalidArgumentException

如果没有看到一些代码,就有点难以回答

就像农夫乔问的,你是如何定义财产的?比如:

@property (nonatomic, retain) MyVar *var;
不同于

@property MyVar *var;
您是如何分配到var的

var = value;
不会在retain中启动,但这会(如果属性定义为“retain”):

编辑:根据您发布的新代码,您似乎过度发布了tmpArray。删除此行:

[tmpArray release];
您不必释放tmpArray,因为此行不保留它:

NSMutableArray *tmpArray = [tmpDict objectForKey:@"myKey"];

关于变量,我假设您指的是ivar(实例变量)。您是否为ivar创建了
@属性
,如果是,请提供代码。您是否为ivar提供了
@synthesis
声明

如果没有,您可能需要提供它们

self.var=x
调用var的setter与:
[var setVar:x]

假设变量设计为从类外部访问,则向.h文件添加@property语句:

@property (nonatomic, retain) ClassName *var;
在关联的.m文件中添加:

@synthesize var;
在.m文件方法中,添加:

[var release];
all used应通过以下方式访问变量: 在定义类中:
self.var
在通过
实例化变量.var引用的其他类中


考虑研究苹果的,它将节省大量的时间和挫折感。

我看到以下问题:

  • 不要这样做:
    [tmpArray release]
    。您不拥有对tmpArray的引用,它是自动发布的

  • 您是否拥有
    tmpDict
    的参考资料而且,这是一个糟糕的变量名;)

  • 能否确认
    [tmpDict objectForKey:@“myKey”]
    返回数组


你遇到了什么样的车祸?您是否将属性声明为retain或assign?您的意思是“变量生存期”?我正在使用@属性(非原子,保留)MyVar*var;self.var=valueOMG它成功了!!!从星期一开始我就一直在研究这个问题。非常感谢你!我不知道有过度释放的事情。卑鄙的程序员:试图管理内存,过度释放变量!多红?:p如果还没有,请阅读《内存管理指南》。它应该让事情变得更清楚。哈哈谢谢:P为你做了这个:还有,因为reddit,这里的上下箭头把我搞糊涂了。我都做了。我也需要在包含的类中合成它吗?我用代码编辑。还有什么是InstancedVariable.var?哦,天哪,我开始听起来像个十足的新手了!您不应该释放tmpArray,它不是返回保留的。阅读苹果的《内存使用指南》将为您节省大量时间。此外,如果使用ARC(自动引用计数),则永远不会使用保留、释放或自动释放。ARC在幕后添加所有引用计数,您永远不会写入或查看保留、释放或自动释放。ARC是未来。虽然ARC不在NDA范围内,但它确实需要Xcode 4.2,它仅对开发人员可用,并且在NDA范围内。假设你已经注册了99美元的开发者程序,从Beta版抓取Xcode 4.2。
@synthesize var;
[var release];