หากคุณเริ่มต้น NSMutableArray ด้วยวิธีสะดวกของ NSArray ดังที่กล่าวมาข้างต้น คุณจะได้รับ NSArray หรือ NSMutableArray หรือไม่
มีผลกระทบอะไรบ้าง?
(ฉันรู้ว่า NSMutableArray มี "arrayWithCapacity: ฉันแค่สงสัย)
หากคุณเริ่มต้น NSMutableArray ด้วยวิธีสะดวกของ NSArray ดังที่กล่าวมาข้างต้น คุณจะได้รับ NSArray หรือ NSMutableArray หรือไม่
มีผลกระทบอะไรบ้าง?
(ฉันรู้ว่า NSMutableArray มี "arrayWithCapacity: ฉันแค่สงสัย)
หากคุณเริ่มต้นโดยใช้:
NSMutableArray *array = [NSMutableArray array];
คุณได้รับ NSMutableArray คุณสมบัติที่ยอดเยี่ยมอย่างหนึ่งของ Objective-C ก็คือวิธีการเรียนนั้นสืบทอดมาจากคลาสย่อย
ดังนั้นใน class method คุณสามารถทำสิ่งนี้ได้:
+(id)array {
return [[[self alloc] init] autorelease];
}
และ self
จะอ้างอิงถึงคลาสอ็อบเจ็กต์ที่มีการรันโค้ด (NSArray
หรือ NSMutableArray
)
อัปเดต: แม้ว่าคำแนะนำของฉันในการ "ทดสอบด้วยตัวเอง" โดยทั่วไปแล้วเป็นความคิดที่ดี แต่ก็น่ายินดีเล็กน้อยในกรณีนี้ ขอบคุณ Jim ในความคิดเห็นที่ชี้ให้เห็นว่าคำแนะนำของฉันด้านล่างใช้ไม่ได้ผลดีกับคลาสเหล่านี้ เนื่องจาก NSArray รูปแบบต่างๆ ล้วนถูกนำไปใช้โดยคลาสเชื่อมโยงแบบโทรฟรีของ CoreFoundation
----- คำตอบเดิมสำหรับบริบทด้านล่าง -----
วิธีที่ง่ายที่สุดในการตอบคำถามเช่นนี้คือการทดสอบด้วยตัวเอง ลองจัดสรรอาร์เรย์ในแบบที่คุณสงสัย จากนั้น NSLog จากโค้ดของคุณ:
NSLog(@"เราได้รับ %@", NSStringFromClass([theArray class]));
NSCFArray
เสมอ?
- person Jim Dovey; 12.05.2009