Hi Wolfgang,

nice to read you.

Wolfgang Lux wrote:
Come on Riccardo, before accusing Apple of lying, you should better check the 
facts first.:-)

well.. I checked what the code does when "compiled" not only the documentation.

on 10.13 XCode indeed has:

+ (NSMutableCharacterSet <apple-reference-documentation://hcbtoad_se>*)characterSetWithCharactersInString:(NSString <apple-reference-documentation://hcdPnFRdoM>*)aString;


in the documentation box, so as you suppose, perhaps they just subclassed and implemented it.
If you use any of the character set class methods, Xcode says that they return 
a NSCharacterSet *, which is what you’d expect. It‘s only when you use them for 
NSMutableCharacterSet that Xcode says that they return a NSMutableCharacterSet 
*. And that is correct as well, as a quick look at either the online 
documentation for class NSMutableCharacterSet or at the header NSCharacterSet.h 
in any recent version of the OS would have revealed: Apple simply has chosen to 
redeclare (and likely reimplement) all of the class methods In 
NSMutableCharacterSet to return a NSMutableCharacterSet.
I think I got confused by the class being NSCFCharacterSet

Execution of this code:

    NSMutableCharacterSet *cs;

    cs = [NSMutableCharacterSet characterSetWithCharactersInString:@"a"];
    NSLog(@"class of cs %@ is %@", cs, NSStringFromClass([cs class]));

    if ([cs isKindOfClass:[NSCharacterSet class]])
      NSLog(@"is NSCharacterSet");
    if ([cs isKindOfClass:[NSMutableCharacterSet class]])
      NSLog(@"is NSMutableCharacterSet");

yields this:

2025-07-22 13:21:52.461091+0200 CSTest[606:9532] class of cs <__NSCFCharacterSet: 0x1020049b0> is __NSCFCharacterSet
2025-07-22 13:21:52.461141+0200 CSTest[606:9532] is NSCharacterSet
2025-07-22 13:21:52.461165+0200 CSTest[606:9532] is NSMutableCharacterSet

so... it is a NSMutableCharacterSet

and it also means I need to redo the test on 10.4, I got confused by the class name __NSCFCharacterSet

Riccardo


Reply via email to