Вы выпускаете allValuesMArray: [allValuesMArray release];
Так как в этом месте количество сохранений равно 0, это немедленно освободит массив.
Попробуйте использовать [allValuesMArray autorelease]. Это освободит массив в будущем, предоставляя вызывающему методу возможность использовать невыпущенный массив или сохранить массив для дальнейшего использования.
Также вы можете проверить, не равен ли ноль product, прежде чем добавлять его в массив.
И у вас есть утечка памяти.
product = [[NSNumber alloc] init];
затем вы назначаете ему другой объект.