any argument, how does [CKMessageEntryView updateEntryView] know whether it should set
placeholderText to “Text Message” or “iMessage”? Judging from this, we can say that
[CKMessageEntryView updateEntryView] must have conducted some internal judges to get the
conclusion that the address supports iMessage, hence changed the 2nd data source. Let’s get
back to IDA to see where the 2nd data source comes from, as shown in figure 10-17.
Figure 10- 17 Look for the 2nd data source
R2 is the argument of setPlaceholderText:, which is also the 1st data source. And R2 comes
from R5, therefore R5 is the 2nd data source. Where does R5 come from? There is a branch
here, so let’s take a look at its condition, as shown in figure 10-18.
Figure 10- 18 Branch condition
We can see that the branch condition is “[$r0 recipientCount] == 0”. The meaning of
“recipient” is very obvious that it represents the receiver of message. When the recipient count
is 0, namely there’s no recipient, MobileSMS will branch right, otherwise left. In the current