/ / Разбиране на arrayWithCapacity: метод на NSMutableArray - цел-c, nsmutablearray, nsrangeexception

Разбиране на arrayWithCapacity: метод на NSMutableArray - цел-c, nsmutablearray, nsrangeexception

Трудно ми е да се опитам да разбера метод в класа NSMutableArray на Objective-C. Създадох масив, използвайки arrayWithCapacity: статичен метод от този клас, точно така:

NSMutableArray * myArray = [NSMutableArray arrayWithCapacity: 10];

След това се опитах да получа достъп до елемент в масива:

id myVariable = myArray[5];

И това получавам:

*** Terminating app due to uncaught exception "NSRangeException", reason: "*** -[__NSArrayM objectAtIndex:]: index 5 beyond bounds for empty array"

Защо се случва това? Не разбрах ли нещо за описанието на метода?

Благодаря за помощта.

Отговори:

14 за отговор № 1

Използвайки arrayWithCapacity:10 означава, че вътрешно масивът ще се настрои да държи 10 обекта. Но в нея все още няма обекти.

Обикновено се създава празен масив и се настройва назадръжте само няколко обекта. Когато добавяте все повече и повече обекти, вътрешният масив трябва да бъде преоразмерен. Това означава, че повече памет трябва да се злоупотреби, след това старите обекти се преместват в новата памет и старата памет се почиства.

Ако знаете, че масивът ще съдържа X броя обекти, използвайки arrayWithCapacity позволява на масива да бъде по-ефективен. Можете да добавите още обекти, но ефективността ще бъде загубена.

Всичко това настрана, можете да "t достъп до индекс на масив извън текущия си брой. Трябва да добавите обекти, преди да имате достъп до тях.


-3 за отговор № 2

Инициализирали сте масив като:

NSMutableArray * myArray = [NSMutableArray arrayWithCapacity: 10];

това означава, че можете да добавите до 10 обекта в масива. Достъпвате до шестия обект от масива:

id myVariable = myArray[5];

Не знам как добавяте обектитемасивът, но от грешката изглежда, че вашият масив няма обекти и се опитвате да получите достъп до шестия индекс на празния масив. Опитайте първо да добавите някои обекти.