我正在研究內存管理,並且我做了一個管理表對象的小程序。NSMutableArray包含的對象和內存管理
這裏是我的.h:
@interface Person : NSObject {
NSString *firstName;
NSString *lastName;
}
@property (readwrite, copy) NSString *firstName;
@property (readwrite, copy) NSString *lastName;
這裏是我的.m:
- (IBAction)clic2:(id)sender {
Person *pers = [[Person alloc]init];
NSMutableArray *myarray = [[NSMutableArray alloc] init];
[pers setFirstName:@"FN 1"]; // = pers.firstName
[pers setLastName:@"LN 1"]; // = pers.lastName
[myarray addObject:pers];
[pers setFirstName:@"FN 2"];
[pers setLastName:@"LN 2"];
[myarray addObject:pers];
[pers release];
for(int i = 0; i < [myarray count]; i++)
{
pers = [myarray objectAtIndex:i];
NSLog(@"%d %@ %@ %@", [myarray objectAtIndex:i], pers, pers.firstName, pers.lastName);
}
}
- (void)dealloc
{
[firstName release];
firstName = nil;
[lastName release];
lastName = nil;
[super dealloc];
}
,這是我的NSLog
2011-04-28 21:40:11.568 temp[4456:903] 4495296 <Person: 0x1004497c0> FN 2 LN 2 2011-04-28 21:40:11.571 temp[4456:903] 4495296 <Person: 0x1004497c0> FN 2 LN 2
正如你所看到的,所存儲的信息是一樣的;這似乎是因爲myarray
總是存儲陣列中人員的相同內存地址/內容。
我明白,當我在第二次調用pers
的內容時,系統也會更改myarray
中的信息。
我該如何做以免覆蓋數據?
謝謝你的回答。
編輯:本例是2人,但這個想法是管理給出一個無限數量
EDIT2:謝謝一切都在這種情況下
謝謝,有一個問題,這是這樣做的常見做法? – Vyggo 2011-04-29 03:25:47
當然。想象一下,如果你正在逐行閱讀包含名字和姓氏的文本文件。您仍然需要一個唯一的Person對象來存儲從每行文本讀取的數據。 – 2011-04-29 03:33:42
工作正常。謝謝。 – Vyggo 2011-04-29 03:47:46