我遇到了数据持久存在于我创建的多个对象实例中的问题。数据不会持续存在于同一对象的多个实例中(iOS)
我有一个类“IconViewController”延伸的UIViewController,我的信息传递到诸如应当使用图像的名称:
//IconViewController.h
@interface AppIconViewController : UIViewController
{
NSString *imageName;
}
@property (nonatomic, retain) NSString *imageName;
- (void) doSomething;
//IconViewController.m
@implementation AppIconViewController
@synthesize imageName;
NSNumber *iconWidth;
- (void)loadView
{
[super loadView];
UIImageView *iconImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]];
iconWidth = [NSNumber numberWithFloat:iconImage.bounds.size.width];
[iconImage release];
NSLog(@"iconWidth: %f", [iconWidth floatValue]);
}
- (void) doSomething
{
NSLog(@"iconWidth: %f", [iconWidth floatValue]);
}
在另一个视图控制器,我实例几个实例这些IconViewControllers和传递不同大小的图像对他们说:
AppIconViewController *appIcon1 = [[AppIconViewController alloc] initWithNibName:nil bundle:nil];
appIcon1.imageName = @"Image65PXWide.png";
[self.view addSubview:appIcon1.view];
AppIconViewController *appIcon2 = [[AppIconViewController alloc] initWithNibName:nil bundle:nil];
appIcon2.imageName = @"Image105PXWide.png";
[self.view addSubview:appIcon2.view];
好了,诡异的是,当我创建这些,我得到的日志后面是准确的... appIcon1日志“iconWidth:65.0”和appIcon2日志“iconWidth:105.0”。但是,当我打电话:
[appIcon1 doSomething];
...我的日志 “iconWidth:105.0”。
为什么第一个实例中的数据反映了第二个实例中的数据?我错过了什么?
编辑:
我知道,如果我在头声明iconWidth和合成它作为一个属性,它会成功。所以我想知道如何使它的私人版本持续下去。因为我试图保留NSNumber:
iconWidth = [[NSNumber numberWithFloat:iconImage.bounds.size.width] retain];
...并且它仍然不起作用。它是否需要综合和公开?
编辑#2:
好了,所以我想通了,有一次我在我的头声明iconWidth,它工作得很好,和我没有合成它,所以它保持它的私密性。不确定为什么如果在实现文件中声明它不工作 - 是否有人知道为什么以及如果在实现的顶部声明变量而不在头中有任何目的?现在只是好奇而已。
谢谢Brian,它为我清除它。 – redhotvengeance 2010-11-14 06:01:01