If you must use performSelector and you want N parameters, simply wrap them in an array or dictionary and make the signature of the called method have a single parameter of NSArray or NSDictionary. Any primitive types (like int, float, etc.) will need to be wrapped in NSNumber.
Example With NSArray:
- (void) addMessageFromRemoteNotification:(NSArray*)parameters
{
}
...
[self performSelector:@selector(addMessageFromRemoteNotification:)
withObject:@[ obj1, obj2, obj3, @(4.0f)]];
Example With NSDictionary:
- (void) addMessageFromRemoteNotification:(NSDictionary*)parameters
{
}
...
[self performSelector:@selector(addMessageFromRemoteNotification:)
withObject:@{ @"prop1": @"prop1value", @"prop2": @(4.0f) }];
Good luck!