How to use string constants correctly
You ask:

Should I assign each string to a variable? Many strings are not shared and will only be used once.

Obviously, in the other case, where the string is reused/shared, then of course one would (and should) define the constant/pointer once rather than ever repeating the same string literal in multiple places. This makes code easier to maintain.
You might also use constants/pointer to centralize the definition of all the possible keys in one place. E.g. if the string literals define possible key names used in some web interface, we might want to put all these key names in one place, making it easier to keep track of the API.
But if the strings are not shared and there is no organizational benefit to centralizing these definitions, then no, one would not assign each string its own variable.

Is it worth modifying like this?

If you are asking whether you should convert this ...
- (UIImage *)appleImage {
    UIImage *image = [UIImage imageNamed:@&quot;apple.png&quot;];
    return image;
}

... to the following ...
- (UIImage *)appleImage {
    static NSString *name = @&quot;apple.png&quot;;
    UIImage *image = [UIImage imageNamed:name];
    return image;
}

... then the answer is, no, there is little benefit in doing do.
I would advise against pulling the string literal into its own local NSString pointer just for the sake of it. It just adds syntactic noise in this case. Yes, there are cases where one might pull the literal into its own line for the sake of clarity, but that not is not the case here.
The governing principles are code maintainability and readability.