Есть два стандартных шаблона для достижения того, что вы хотите.
(1) написать метод с множеством аргументов и затем предоставить меньше удобных версий аргументов. Например, рассмотрим следующие методы NSString:
- (NSComparisonResult)compare:(NSString *)string;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask
range:(NSRange)compareRange;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask
range:(NSRange)compareRange locale:(id)locale;
Первые три концептуально [и, вероятно, конкретно, я не проверял] реализованы как обращения к четвертой версии. Это -compare: вызывает -compare: параметры: диапазон: локаль: с соответствующими значениями по умолчанию для трех дополнительных аргументов.
(2) Другой шаблон заключается в реализации версии метода с несколькими аргументами и предоставлении значений по умолчанию, когда аргумент равен NULL / nil или установлен на некоторое значение, которое указывает, что по умолчанию требуется. NSData имеет методы, которые реализованы с этим шаблоном. Например:
+ (id)dataWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask
error:(NSError **)errorPtr;
Если вы передадите 0 в качестве аргумента readOptionsMask, NSData прочитает содержимое файла, используя внутреннюю конфигурацию по умолчанию. Эта конфигурация по умолчанию может меняться со временем.