If you want to keep a pointer to an object that you don’t have, but want it to be valid only as long as it exists, you want to use a weak pointer, because when it is freed by the owner, your pointer will automatically be set to zero and does not indicate the memory that it should not be.
Both of them are differnect, readonly makes no difference if it is weak or strong.
@property (nonatomic, weak, readonly)
@property (nonatomic, readonly)
.