I feel like the reason devices get slower are "Apple optimised iOS for the latest processors". Is this correct?
If so, I don't fully understand. To use a clunky analogy: If a car has a relatively underpowered engine, you would make it as light as possible so it can still run quickly. If your next-gen car has an engine that's twice as powerful, you can make the car heavier without impacting performance. But you wouldn't need to make it heavier. You could keep it as light as ever and have a car that's twice as powerful!
So why is scrolling smooth on an iPhone 5S running iOS 7, but it cannot scroll smoothly when running iOS 10? What about scrolling have Apple made so resource intensive that it doesn't work? Wouldn't it be better to keep it resource-light, no matter what the processor inside the phone is?
OK..So assume that a company produces simple tech devices with their own-designed processors and OS . The current gen devices have a certain number of operations they support in hardware (CPU instructions) that do not include integer multiplication , they have addition and subtraction among other operations but no multiplication, because they never needed multiplication in the implementation of the current functions the device performs , so no need to implement in the CPU raising the costs.
Now the company decides to work on a new device that supports additional functions , some of which could really benefit from hardware support for multiplication in the CPU - so they redesign their CPU to support a new multiplication instruction where two integers can be multiplied so that the result will be available within 1 CPU clock cycle - multiplication is natively supported in the hardware now and needs 1 clock cycle to complete.
BTW The code the developers write and understand is called "source code" ,typically it is run through a special piece of software called a compiler , that translates source code into machine code that references instructions supported in the CPU to produce a program the CPU can understand execute.
So the new CPU is developed , a new compiler that is aware of the new CPU changes is also developed, and source-code libararies that include "building blocks" for the new features are also developed.
The OS team in the company now starts from the old OS code base - adding new features that use those new "building blocks", and re-writing some/a lot of the old functionality that can benefit from those new libraries in terms of producing faster execution times or simply for making the source code cleaner and easier to maintain. So now not only code for the new features use multiplication in the CPU , but also old OS code is overhauled to use the new libraries, let's assume the scrollig functionality got re-written to use multiplication just for the sake of code consistency and easier code maintenence (=lower man hrs) in the future.
The new device with the new CPU and new OS version is released and works like it should . Now the company had also promised updates to the next version or two of the OS to people who bought the old devices when they bought them , but the problem is that the CPU of the old device does not support multiplication - the company comes up with two options :
A- Redesign those features using different implementation that does not rely on multiplication - can be done for the most part but may not match the performance of the newer device and will require major cost and engineering resoures . and also they will be maintaining several versions of their OS source code this way.
B- Use the new source code but change the compiler so that when a multiplication instruction call is referenced it is replaced by an appropriate number of addition instruction calls - potenially resulting in big delays in execution - say for the new CPU to work out ( 10 * 4 ) it requires 1 clock cycle , but on the code compiled to the old CPU it will require 3 clock cycles ( ( (10+10) + 10 )+10 ) to perform the same operation (actually maybe 4 cycles if an additional cycle is needed to determine the operand to use (the max of the two numbers) - in this case 10 and not 4 to reduce the number of addition operations required for the result - if the compiler itself is optimized = more man hrs ).
With option B the new OS will still work on the old CPU but is not optimized (things are taking more time than they could if implemented differently) .
Now this company fulfilled the promise to users who bought old devices but those devices are now slower than before..
This company may not be interested in providing a better experience for older devices even though they can affored it as their devices are expen$ive , also they happen to have a fan base that will rush to buy the new device anyway even if they optimized the old one.
There you have it.. Hope that helps with your question.