ซอมบี้ส่งข้อความโดย [จำนวนอาร์เรย์]

ฉันมีอาร์เรย์ที่ไม่แน่นอนของ ivar ซึ่งฉันตั้งค่าใน viewDidLoad ดังนี้:

names = [NSMutableArray arrayWithCapacity:30];
[names addObject:@"Joe"];
[names addObject:@"Dom"];
[names addObject:@"Bob"];

จากนั้นในวิธีต่อมา เมื่อแตะปุ่ม ฉันทำสิ่งต่อไปนี้ แต่ดูเหมือนว่าอาเรย์จะปล่อยมากเกินไป... โดยที่ Zombie ส่งข้อความ:

int r = arc4random() % [names count];
NSLog(@"%d", r);

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร?

ขอบคุณ.


person joec    schedule 09.10.2010    source แหล่งที่มา


คำตอบ (1)


+arrayWithCapacity: จะส่งคืนออบเจ็กต์ที่เผยแพร่อัตโนมัติ เช่น ใน "วิธีต่อมา" ออบเจ็กต์นี้มีแนวโน้มว่าจะถูกจัดสรรคืนแล้ว คุณต้องเก็บวัตถุนี้ไว้เพื่อให้พร้อมใช้งาน "ในภายหลัง"

names = [[NSMutableArray arrayWithCapacity:30] retain];

(หรืออีกทางหนึ่ง

names = [[NSMutableArray alloc] initWithCapacity:30];

)

อย่าลืมปล่อยใน -dealloc

-(void)dealloc {
   [names release];
   ...
   [super dealloc];
}
person kennytm    schedule 09.10.2010
comment
สมมติว่า names เป็น iVar และมีตัวตั้งค่าที่เกี่ยวข้องหรือ @property self.names = [NSMutableArray array]; ก็ใช้ได้เช่นกัน - person bbum; 09.10.2010