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