This code works fine:
NSString *titleForMail =[NSString stringWithFormat:@"text %@",_infoTFProduct.text];
[mailCont setSubject:titleForMail];
While this code gives me the error above.
[mailCont setSubject:@"yo! %@", _infoTFProduct.text];
I’d love to know why.

Because, well,
[mailCont setSubject:@"yo! %@", _infoTFProduct.text];clearly has 2 arguments? In fact, the comma is what signifies the end of the first argument and the start of the second.That syntax is not universal for interpolating strings.
stringWithFormat:andNSLogI believe are the only cases that can handle this argument format.So very few methods that accept strings will also accept strings with interpolation arguments. If you want to interpolate values into a string and use that anywhere you can use a string, you must use
[NSString stringWithFormat:]first.