Pretty much all those. Announcing products in advanced is a risky thing to do unless the time frame is short and you are very definite about what you want to release and you can release it. Of course doing that can either build hype or destroy it.
For a company like Apple, they want to keep people guessing since their competition has abilities to rapidly adapt to what Apple is doing. If Apple reveals things early, with say the iPhone, Samsung is just going to release their next galaxy either before Apple can or close to them. Apple knows that companies try their darnedest to copy them and steal their thunder - they aren’t going to give competitors any more time than necessary.
There is also the Osborne effect - If you have tons of a product out at market and you have a huge marketshare, you have more flexibility, but you really don’t want to have your consumers trained to expect early announcements unless you have a short time to release. With the Osborne effect, you announce, and consumers are reluctant to buy your product now since it will be obsolete right away. They can only wait so long though - otherwise consumers get impatient and can go with your competitor (this is somewhat tempered by ecosystem lockdown but that’s not absolute protection) when they release something before you can...
That’s why when Apple re-announces things, it’s usually something that’s not subject to competition or it isn’t a direct profit generator (like OS X and iOS). For other things, it’s either a brand new product for them or it has a short timeframe between announcement and release for established products like the iPhone.