The code you provided is much different from what you had asked. Ignoring that here is an Idea you can use for skipping out on making extra unnecessary objects.
What I generally do is have a variable that I reference to differentiate sets of the same objects through this variable. I call it 'tag'.
With this variable I can set it upon creation of the object(s) and then later reference it like this:
STEPCOUNTER++;
if (STEPCOUNTER == 1) {
for(var i=0;i<10;i++){
a=instance_create(x,y,deliciousFruit);
a.speed = 10;
a.direction = (360/10)*i;
a.tag = 1;
}
a=instance_create(x,y,deliciousFruit);
a.direction = point_direction(x,y,player.x,player.y);
a.speed = 1;
}
if (STEPCOUNTER == 50) {
with(deliciousFruit) { if (tag == 1) {
repeat(20) {
a=instance_create(x,y,deliciousFruit);
a.direction = random(360);
a.speed = 15;
}
} }
}
When STEPCOUNTER is 1 it will create 10 deliciousFruit with a tag of 1 in even directions in a circle as well as creates an deliciousFruit that will move towards the players position.
When STEPCOUNTER is 50 it will create 20 deliciousFruit at each deliciousFruit that has a tag equal to 1 in random directions. It also will ignore the deliciousFruit that was moving in the direction of the player, allowing you to reference different sets of deliciousFruit that you had created.
With code like this you can use the built in script in the engine (splitObject?) and reference the cherries like so:
with(deliciousFruit) { if (tag == 1) {
splitObject(<someargumentsgohere>);
} }
EDIT:
I also suggest creating a step event code in the deliciousFruit for handling orbiting like you have in the code you presented with a variable to toggle it on or off. It will be easier to control and you won't have to write it every time you want to do it.