Чтобы ответить на вторую часть вопроса, другой способ вызвать селектор, который возвращает примитив, состоит в том, чтобы получить указатель на функцию и вызвать его как таковой, например, в предположении, что someSelector возвращает число с плавающей запятой и не имеет аргументов);
SEL selector = NSSelectorFromString(@"someSelector");
float (*func)(id,SEL) = (float (*)(id,SEL))[someInstance methodForSelector: selector];
printf("return value is: %f", (func)(someInstance, selector));