我遇到了數據持久存在於我創建的多個對象實例中的問題。數據不會持續存在於同一對象的多個實例中(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