[ffigen] Move ObjC classes and SELs to NativeLibrary (#331)

* Improve Type deduping in objc_msgSend

* WIP

* Finish cleanup

* Fix analysis
diff --git a/pkgs/ffigen/lib/src/code_generator/objc_built_in_functions.dart b/pkgs/ffigen/lib/src/code_generator/objc_built_in_functions.dart
index 6074a71..95bce8b 100644
--- a/pkgs/ffigen/lib/src/code_generator/objc_built_in_functions.dart
+++ b/pkgs/ffigen/lib/src/code_generator/objc_built_in_functions.dart
@@ -4,6 +4,7 @@
 
 import 'package:ffigen/src/code_generator.dart';
 
+import 'binding_string.dart';
 import 'writer.dart';
 
 /// Built in functions used by the Objective C bindings.
@@ -15,7 +16,18 @@
     parameters: [Parameter(name: 'str', type: PointerType(charType))],
     isInternal: true,
   );
-  late final String registerName;
+  late final registerName = ObjCInternalFunction(
+      '_registerName', _registerNameFunc, (Writer w, String name) {
+    final s = StringBuffer();
+    final selType = _registerNameFunc.functionType.returnType.getCType(w);
+    s.write('\n$selType $name(String name) {\n');
+    s.write('  final cstr = name.toNativeUtf8();\n');
+    s.write('  final sel = ${_registerNameFunc.name}(cstr.cast());\n');
+    s.write('  ${w.ffiPkgLibraryPrefix}.calloc.free(cstr);\n');
+    s.write('  return sel;\n');
+    s.write('}\n');
+    return s.toString();
+  });
 
   late final _getClassFunc = Func(
     name: '_objc_getClass',
@@ -24,7 +36,18 @@
     parameters: [Parameter(name: 'str', type: PointerType(charType))],
     isInternal: true,
   );
-  late final String getClass;
+  late final getClass =
+      ObjCInternalFunction('_getClass', _getClassFunc, (Writer w, String name) {
+    final s = StringBuffer();
+    final objType = _getClassFunc.functionType.returnType.getCType(w);
+    s.write('\n$objType $name(String name) {\n');
+    s.write('  final cstr = name.toNativeUtf8();\n');
+    s.write('  final clazz = ${_getClassFunc.name}(cstr.cast());\n');
+    s.write('  ${w.ffiPkgLibraryPrefix}.calloc.free(cstr);\n');
+    s.write('  return clazz;\n');
+    s.write('}\n');
+    return s.toString();
+  });
 
   // We need to load a separate instance of objc_msgSend for each signature.
   final _msgSendFuncs = <String, Func>{};
@@ -33,7 +56,7 @@
     for (final p in params) {
       key += ' ' + p.type.cacheKey();
     }
-    _msgSendFuncs[key] ??= Func(
+    return _msgSendFuncs[key] ??= Func(
       name: '_objc_msgSend_${_msgSendFuncs.length}',
       originalName: 'objc_msgSend',
       returnType: returnType,
@@ -44,7 +67,14 @@
       ],
       isInternal: true,
     );
-    return _msgSendFuncs[key]!;
+  }
+
+  final _selObjects = <String, ObjCInternalGlobal>{};
+  ObjCInternalGlobal getSelObject(String methodName) {
+    return _selObjects[methodName] ??= ObjCInternalGlobal(
+        PointerType(objCSelType),
+        '_sel_${methodName.replaceAll(":", "_")}',
+        () => '${registerName.name}("$methodName")');
   }
 
   bool utilsExist = false;
@@ -52,24 +82,7 @@
     if (utilsExist) return;
     utilsExist = true;
 
-    registerName = w.topLevelUniqueNamer.makeUnique('_registerName');
-    final selType = _registerNameFunc.functionType.returnType.getCType(w);
-    s.write('\n$selType $registerName(${w.className} _lib, String name) {\n');
-    s.write('  final cstr = name.toNativeUtf8();\n');
-    s.write('  final sel = _lib.${_registerNameFunc.name}(cstr.cast());\n');
-    s.write('  ${w.ffiPkgLibraryPrefix}.calloc.free(cstr);\n');
-    s.write('  return sel;\n');
-    s.write('}\n');
-
-    getClass = w.topLevelUniqueNamer.makeUnique('_getClass');
-    final objType = _getClassFunc.functionType.returnType.getCType(w);
-    s.write('\n$objType $getClass(${w.className} _lib, String name) {\n');
-    s.write('  final cstr = name.toNativeUtf8();\n');
-    s.write('  final clazz = _lib.${_getClassFunc.name}(cstr.cast());\n');
-    s.write('  ${w.ffiPkgLibraryPrefix}.calloc.free(cstr);\n');
-    s.write('  return clazz;\n');
-    s.write('}\n');
-
+    final objType = PointerType(objCObjectType).getCType(w);
     s.write('\nclass _ObjCWrapper {\n');
     s.write('  final $objType _id;\n');
     s.write('  final ${w.className} _lib;\n');
@@ -78,11 +91,14 @@
   }
 
   void addDependencies(Set<Binding> dependencies) {
-    _registerNameFunc.addDependencies(dependencies);
-    _getClassFunc.addDependencies(dependencies);
+    registerName.addDependencies(dependencies);
+    getClass.addDependencies(dependencies);
     for (final func in _msgSendFuncs.values) {
       func.addDependencies(dependencies);
     }
+    for (final sel in _selObjects.values) {
+      sel.addDependencies(dependencies);
+    }
   }
 
   void generateNSStringUtils(Writer w, StringBuffer s) {
@@ -109,3 +125,51 @@
     s.write('}\n\n');
   }
 }
+
+/// Functions only used internally by ObjC bindings, such as getClass.
+class ObjCInternalFunction extends LookUpBinding {
+  final Func _wrappedFunction;
+  final String Function(Writer, String) _toBindingString;
+
+  ObjCInternalFunction(
+      String name, this._wrappedFunction, this._toBindingString)
+      : super(originalName: name, name: name, isInternal: true);
+
+  @override
+  BindingString toBindingString(Writer w) {
+    name = w.wrapperLevelUniqueNamer.makeUnique(name);
+    return BindingString(
+        type: BindingStringType.func, string: _toBindingString(w, name));
+  }
+
+  @override
+  void addDependencies(Set<Binding> dependencies) {
+    if (dependencies.contains(this)) return;
+    dependencies.add(this);
+    _wrappedFunction.addDependencies(dependencies);
+  }
+}
+
+/// Globals only used internally by ObjC bindings, such as classes and SELs.
+class ObjCInternalGlobal extends LookUpBinding {
+  final Type type;
+  final String Function() makeValue;
+
+  ObjCInternalGlobal(this.type, String name, this.makeValue)
+      : super(originalName: name, name: name, isInternal: true);
+
+  @override
+  BindingString toBindingString(Writer w) {
+    final s = StringBuffer();
+    name = w.wrapperLevelUniqueNamer.makeUnique(name);
+    s.write('late final ${type.getCType(w)} $name = ${makeValue()};');
+    return BindingString(type: BindingStringType.global, string: s.toString());
+  }
+
+  @override
+  void addDependencies(Set<Binding> dependencies) {
+    if (dependencies.contains(this)) return;
+    dependencies.add(this);
+    type.addDependencies(dependencies);
+  }
+}
diff --git a/pkgs/ffigen/lib/src/code_generator/objc_interface.dart b/pkgs/ffigen/lib/src/code_generator/objc_interface.dart
index ed9e1c3..65536ff 100644
--- a/pkgs/ffigen/lib/src/code_generator/objc_interface.dart
+++ b/pkgs/ffigen/lib/src/code_generator/objc_interface.dart
@@ -43,6 +43,7 @@
   final classMethods = <String, ObjCMethod>{};
 
   final ObjCBuiltInFunctions builtInFunctions;
+  late final ObjCInternalGlobal _classObject;
 
   ObjCInterface({
     String? usr,
@@ -83,7 +84,6 @@
 
     builtInFunctions.ensureUtilsExist(w, s);
     final objType = PointerType(objCObjectType).getCType(w);
-    final selType = PointerType(objCSelType).getCType(w);
 
     // Class declaration.
     s.write('class $name ');
@@ -91,10 +91,6 @@
     s.write('extends ${superType?.name ?? '_ObjCWrapper'} {\n');
     s.write('  $name._($objType id, $natLib lib) : super._(id, lib);\n\n');
 
-    // Class object, used to call static methods.
-    final classObject = uniqueNamer.makeUnique('_class');
-    s.write('  static $objType? $classObject;\n\n');
-
     // Cast method.
     s.write('  static $name castFrom<T extends _ObjCWrapper>(T other) {\n');
     s.write('    return $name._(other._id, other._lib);\n');
@@ -107,13 +103,9 @@
     // Methods.
     for (final m in methods) {
       final methodName = m._getDartMethodName(uniqueNamer);
-      final selName = uniqueNamer.makeUnique('_sel_$methodName');
       final isStatic = m.isClass;
       final returnType = m.returnType!;
 
-      // SEL object for the method.
-      s.write('  static $selType? $selName;');
-
       // The method declaration.
       if (m.dartDoc != null) {
         s.write(makeDartDoc(m.dartDoc!));
@@ -168,12 +160,6 @@
       s.write(' {\n');
 
       // Implementation.
-      if (isStatic) {
-        s.write('    $classObject ??= '
-            '${builtInFunctions.getClass}(_lib, "$originalName");\n');
-      }
-      s.write('    $selName ??= '
-          '${builtInFunctions.registerName}(_lib, "${m.originalName}");\n');
       final convertReturn = m.kind != ObjCMethodKind.propertySetter &&
           _needsConverting(returnType);
 
@@ -181,8 +167,8 @@
         s.write('    ${convertReturn ? 'final _ret = ' : 'return '}');
       }
       s.write('_lib.${m.msgSend!.name}(');
-      s.write(isStatic ? '_class!' : '_id');
-      s.write(', $selName!');
+      s.write(isStatic ? '_lib.${_classObject.name}' : '_id');
+      s.write(', _lib.${m.selObject!.name}');
       for (final p in m.params) {
         s.write(', ${_doArgConversion(p.type, p.name)}');
       }
@@ -209,6 +195,13 @@
   void addDependencies(Set<Binding> dependencies) {
     if (dependencies.contains(this)) return;
     dependencies.add(this);
+    builtInFunctions.addDependencies(dependencies);
+
+    _classObject = ObjCInternalGlobal(
+        PointerType(objCObjectType),
+        '_class_$originalName',
+        () => '${builtInFunctions.getClass.name}("$originalName")')
+      ..addDependencies(dependencies);
 
     if (isNSString) {
       _addNSStringMethods();
@@ -224,8 +217,6 @@
     for (final m in methods) {
       m.addDependencies(dependencies, builtInFunctions);
     }
-
-    builtInFunctions.addDependencies(dependencies);
   }
 
   void _filterPropertyMethods() {
@@ -350,6 +341,7 @@
   final List<ObjCMethodParam> params;
   final ObjCMethodKind kind;
   final bool isClass;
+  ObjCInternalGlobal? selObject;
   Func? msgSend;
 
   ObjCMethod({
@@ -373,7 +365,10 @@
     for (final p in params) {
       p.type.addDependencies(dependencies);
     }
-    msgSend = builtInFunctions.getMsgSendFunc(returnType!, params);
+    selObject ??= builtInFunctions.getSelObject(originalName)
+      ..addDependencies(dependencies);
+    msgSend ??= builtInFunctions.getMsgSendFunc(returnType!, params)
+      ..addDependencies(dependencies);
   }
 
   String _getDartMethodName(UniqueNamer uniqueNamer) {
diff --git a/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_config_bindings.dart b/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_config_bindings.dart
index f837933..e647802 100644
--- a/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_config_bindings.dart
+++ b/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_config_bindings.dart
@@ -20,6 +20,13 @@
           lookup)
       : _lookup = lookup;
 
+  ffi.Pointer<ObjCSel> _registerName1(String name) {
+    final cstr = name.toNativeUtf8();
+    final sel = _sel_registerName(cstr.cast());
+    pkg_ffi.calloc.free(cstr);
+    return sel;
+  }
+
   ffi.Pointer<ObjCSel> _sel_registerName(
     ffi.Pointer<pkg_ffi.Char> str,
   ) {
@@ -35,6 +42,13 @@
   late final __sel_registerName = __sel_registerNamePtr
       .asFunction<ffi.Pointer<ObjCSel> Function(ffi.Pointer<pkg_ffi.Char>)>();
 
+  ffi.Pointer<ObjCObject> _getClass1(String name) {
+    final cstr = name.toNativeUtf8();
+    final clazz = _objc_getClass(cstr.cast());
+    pkg_ffi.calloc.free(cstr);
+    return clazz;
+  }
+
   ffi.Pointer<ObjCObject> _objc_getClass(
     ffi.Pointer<pkg_ffi.Char> str,
   ) {
@@ -50,6 +64,9 @@
   late final __objc_getClass = __objc_getClassPtr.asFunction<
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<pkg_ffi.Char>)>();
 
+  late final ffi.Pointer<ObjCObject> _class_Foo1 = _getClass1("Foo");
+  late final ffi.Pointer<ObjCObject> _class_NSObject1 = _getClass1("NSObject");
+  late final ffi.Pointer<ObjCSel> _sel_load1 = _registerName1("load");
   void _objc_msgSend_0(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -67,6 +84,9 @@
   late final __objc_msgSend_0 = __objc_msgSend_0Ptr.asFunction<
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initialize1 =
+      _registerName1("initialize");
+  late final ffi.Pointer<ObjCSel> _sel_init1 = _registerName1("init");
   instancetype _objc_msgSend_1(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -84,6 +104,9 @@
   late final __objc_msgSend_1 = __objc_msgSend_1Ptr.asFunction<
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_new1 = _registerName1("new");
+  late final ffi.Pointer<ObjCSel> _sel_allocWithZone_1 =
+      _registerName1("allocWithZone:");
   instancetype _objc_msgSend_2(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -104,6 +127,18 @@
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<_NSZone>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_alloc1 = _registerName1("alloc");
+  late final ffi.Pointer<ObjCSel> _sel_dealloc1 = _registerName1("dealloc");
+  late final ffi.Pointer<ObjCSel> _sel_finalize1 = _registerName1("finalize");
+  late final ffi.Pointer<ObjCSel> _sel_copy1 = _registerName1("copy");
+  late final ffi.Pointer<ObjCSel> _sel_mutableCopy1 =
+      _registerName1("mutableCopy");
+  late final ffi.Pointer<ObjCSel> _sel_copyWithZone_1 =
+      _registerName1("copyWithZone:");
+  late final ffi.Pointer<ObjCSel> _sel_mutableCopyWithZone_1 =
+      _registerName1("mutableCopyWithZone:");
+  late final ffi.Pointer<ObjCSel> _sel_instancesRespondToSelector_1 =
+      _registerName1("instancesRespondToSelector:");
   bool _objc_msgSend_3(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -125,6 +160,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_conformsToProtocol_1 =
+      _registerName1("conformsToProtocol:");
   bool _objc_msgSend_4(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -146,6 +183,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_methodForSelector_1 =
+      _registerName1("methodForSelector:");
   IMP _objc_msgSend_5(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -166,6 +205,10 @@
       IMP Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_instanceMethodForSelector_1 =
+      _registerName1("instanceMethodForSelector:");
+  late final ffi.Pointer<ObjCSel> _sel_doesNotRecognizeSelector_1 =
+      _registerName1("doesNotRecognizeSelector:");
   void _objc_msgSend_6(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -186,6 +229,8 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_forwardingTargetForSelector_1 =
+      _registerName1("forwardingTargetForSelector:");
   ffi.Pointer<ObjCObject> _objc_msgSend_7(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -206,6 +251,8 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_forwardInvocation_1 =
+      _registerName1("forwardInvocation:");
   void _objc_msgSend_8(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -226,6 +273,10 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCObject> _class_NSMethodSignature1 =
+      _getClass1("NSMethodSignature");
+  late final ffi.Pointer<ObjCSel> _sel_methodSignatureForSelector_1 =
+      _registerName1("methodSignatureForSelector:");
   ffi.Pointer<ObjCObject> _objc_msgSend_9(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -246,6 +297,10 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_instanceMethodSignatureForSelector_1 =
+      _registerName1("instanceMethodSignatureForSelector:");
+  late final ffi.Pointer<ObjCSel> _sel_allowsWeakReference1 =
+      _registerName1("allowsWeakReference");
   bool _objc_msgSend_10(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -264,6 +319,15 @@
   late final __objc_msgSend_10 = __objc_msgSend_10Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_retainWeakReference1 =
+      _registerName1("retainWeakReference");
+  late final ffi.Pointer<ObjCSel> _sel_isSubclassOfClass_1 =
+      _registerName1("isSubclassOfClass:");
+  late final ffi.Pointer<ObjCSel> _sel_resolveClassMethod_1 =
+      _registerName1("resolveClassMethod:");
+  late final ffi.Pointer<ObjCSel> _sel_resolveInstanceMethod_1 =
+      _registerName1("resolveInstanceMethod:");
+  late final ffi.Pointer<ObjCSel> _sel_hash1 = _registerName1("hash");
   int _objc_msgSend_11(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -281,6 +345,12 @@
   late final __objc_msgSend_11 = __objc_msgSend_11Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_superclass1 =
+      _registerName1("superclass");
+  late final ffi.Pointer<ObjCSel> _sel_class1 = _registerName1("class");
+  late final ffi.Pointer<ObjCObject> _class_NSString1 = _getClass1("NSString");
+  late final ffi.Pointer<ObjCSel> _sel_stringWithCString_encoding_1 =
+      _registerName1("stringWithCString:encoding:");
   ffi.Pointer<ObjCObject> _objc_msgSend_12(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -306,6 +376,8 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<pkg_ffi.Char>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_UTF8String1 =
+      _registerName1("UTF8String");
   ffi.Pointer<pkg_ffi.Char> _objc_msgSend_13(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -324,6 +396,8 @@
       ffi.Pointer<pkg_ffi.Char> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_description1 =
+      _registerName1("description");
   ffi.Pointer<ObjCObject> _objc_msgSend_14(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -341,20 +415,9 @@
   late final __objc_msgSend_14 = __objc_msgSend_14Ptr.asFunction<
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
-}
 
-ffi.Pointer<ObjCSel> _registerName(NativeLibrary _lib, String name) {
-  final cstr = name.toNativeUtf8();
-  final sel = _lib._sel_registerName(cstr.cast());
-  pkg_ffi.calloc.free(cstr);
-  return sel;
-}
-
-ffi.Pointer<ObjCObject> _getClass(NativeLibrary _lib, String name) {
-  final cstr = name.toNativeUtf8();
-  final clazz = _lib._objc_getClass(cstr.cast());
-  pkg_ffi.calloc.free(cstr);
-  return clazz;
+  late final ffi.Pointer<ObjCSel> _sel_debugDescription1 =
+      _registerName1("debugDescription");
 }
 
 class _ObjCWrapper {
@@ -366,293 +429,202 @@
 class Foo extends NSObject {
   Foo._(ffi.Pointer<ObjCObject> id, NativeLibrary lib) : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static Foo castFrom<T extends _ObjCWrapper>(T other) {
     return Foo._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static Foo new1(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "Foo");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_Foo1, _lib._sel_new1);
     return Foo._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static Foo alloc(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "Foo");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_Foo1, _lib._sel_alloc1);
     return Foo._(_ret, _lib);
   }
 }
 
+class ObjCSel extends ffi.Opaque {}
+
+class ObjCObject extends ffi.Opaque {}
+
 class NSObject extends _ObjCWrapper {
   NSObject._(ffi.Pointer<ObjCObject> id, NativeLibrary lib) : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSObject castFrom<T extends _ObjCWrapper>(T other) {
     return NSObject._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_load;
   static void load(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_load ??= _registerName(_lib, "load");
-    _lib._objc_msgSend_0(_class!, _sel_load!);
+    _lib._objc_msgSend_0(_lib._class_NSObject1, _lib._sel_load1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initialize;
   static void initialize(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_initialize ??= _registerName(_lib, "initialize");
-    _lib._objc_msgSend_0(_class!, _sel_initialize!);
+    _lib._objc_msgSend_0(_lib._class_NSObject1, _lib._sel_initialize1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_init;
   NSObject init() {
-    _sel_init ??= _registerName(_lib, "init");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_init!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_init1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSObject new1(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_new1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_allocWithZone;
   static NSObject allocWithZone(NativeLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_allocWithZone ??= _registerName(_lib, "allocWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_allocWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_allocWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSObject alloc(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_alloc1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_dealloc;
   void dealloc() {
-    _sel_dealloc ??= _registerName(_lib, "dealloc");
-    _lib._objc_msgSend_0(_id, _sel_dealloc!);
+    _lib._objc_msgSend_0(_id, _lib._sel_dealloc1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_finalize;
   void finalize() {
-    _sel_finalize ??= _registerName(_lib, "finalize");
-    _lib._objc_msgSend_0(_id, _sel_finalize!);
+    _lib._objc_msgSend_0(_id, _lib._sel_finalize1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_copy;
   NSObject copy() {
-    _sel_copy ??= _registerName(_lib, "copy");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_copy!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_copy1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_mutableCopy;
   NSObject mutableCopy() {
-    _sel_mutableCopy ??= _registerName(_lib, "mutableCopy");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_mutableCopy!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_mutableCopy1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_copyWithZone;
   static NSObject copyWithZone(NativeLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_copyWithZone ??= _registerName(_lib, "copyWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_copyWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_copyWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_mutableCopyWithZone;
   static NSObject mutableCopyWithZone(
       NativeLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_mutableCopyWithZone ??= _registerName(_lib, "mutableCopyWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_mutableCopyWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_mutableCopyWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instancesRespondToSelector;
   static bool instancesRespondToSelector(
       NativeLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instancesRespondToSelector ??=
-        _registerName(_lib, "instancesRespondToSelector:");
-    return _lib._objc_msgSend_3(
-        _class!, _sel_instancesRespondToSelector!, aSelector);
+    return _lib._objc_msgSend_3(_lib._class_NSObject1,
+        _lib._sel_instancesRespondToSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_conformsToProtocol;
   static bool conformsToProtocol(NativeLibrary _lib, NSObject protocol) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_conformsToProtocol ??= _registerName(_lib, "conformsToProtocol:");
     return _lib._objc_msgSend_4(
-        _class!, _sel_conformsToProtocol!, protocol._id);
+        _lib._class_NSObject1, _lib._sel_conformsToProtocol_1, protocol._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_methodForSelector;
   IMP methodForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_methodForSelector ??= _registerName(_lib, "methodForSelector:");
-    return _lib._objc_msgSend_5(_id, _sel_methodForSelector!, aSelector);
+    return _lib._objc_msgSend_5(_id, _lib._sel_methodForSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instanceMethodForSelector;
   static IMP instanceMethodForSelector(
       NativeLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instanceMethodForSelector ??=
-        _registerName(_lib, "instanceMethodForSelector:");
-    return _lib._objc_msgSend_5(
-        _class!, _sel_instanceMethodForSelector!, aSelector);
+    return _lib._objc_msgSend_5(_lib._class_NSObject1,
+        _lib._sel_instanceMethodForSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_doesNotRecognizeSelector;
   void doesNotRecognizeSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_doesNotRecognizeSelector ??=
-        _registerName(_lib, "doesNotRecognizeSelector:");
-    _lib._objc_msgSend_6(_id, _sel_doesNotRecognizeSelector!, aSelector);
+    _lib._objc_msgSend_6(_id, _lib._sel_doesNotRecognizeSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_forwardingTargetForSelector;
   NSObject forwardingTargetForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_forwardingTargetForSelector ??=
-        _registerName(_lib, "forwardingTargetForSelector:");
-    final _ret =
-        _lib._objc_msgSend_7(_id, _sel_forwardingTargetForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_7(
+        _id, _lib._sel_forwardingTargetForSelector_1, aSelector);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_forwardInvocation;
   void forwardInvocation(NSObject anInvocation) {
-    _sel_forwardInvocation ??= _registerName(_lib, "forwardInvocation:");
-    _lib._objc_msgSend_8(_id, _sel_forwardInvocation!, anInvocation._id);
+    _lib._objc_msgSend_8(_id, _lib._sel_forwardInvocation_1, anInvocation._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_methodSignatureForSelector;
   NSMethodSignature methodSignatureForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_methodSignatureForSelector ??=
-        _registerName(_lib, "methodSignatureForSelector:");
-    final _ret =
-        _lib._objc_msgSend_9(_id, _sel_methodSignatureForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_9(
+        _id, _lib._sel_methodSignatureForSelector_1, aSelector);
     return NSMethodSignature._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instanceMethodSignatureForSelector;
   static NSMethodSignature instanceMethodSignatureForSelector(
       NativeLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instanceMethodSignatureForSelector ??=
-        _registerName(_lib, "instanceMethodSignatureForSelector:");
-    final _ret = _lib._objc_msgSend_9(
-        _class!, _sel_instanceMethodSignatureForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_9(_lib._class_NSObject1,
+        _lib._sel_instanceMethodSignatureForSelector_1, aSelector);
     return NSMethodSignature._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_allowsWeakReference;
   bool allowsWeakReference() {
-    _sel_allowsWeakReference ??= _registerName(_lib, "allowsWeakReference");
-    return _lib._objc_msgSend_10(_id, _sel_allowsWeakReference!);
+    return _lib._objc_msgSend_10(_id, _lib._sel_allowsWeakReference1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_retainWeakReference;
   bool retainWeakReference() {
-    _sel_retainWeakReference ??= _registerName(_lib, "retainWeakReference");
-    return _lib._objc_msgSend_10(_id, _sel_retainWeakReference!);
+    return _lib._objc_msgSend_10(_id, _lib._sel_retainWeakReference1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_isSubclassOfClass;
   static bool isSubclassOfClass(NativeLibrary _lib, NSObject aClass) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_isSubclassOfClass ??= _registerName(_lib, "isSubclassOfClass:");
-    return _lib._objc_msgSend_4(_class!, _sel_isSubclassOfClass!, aClass._id);
+    return _lib._objc_msgSend_4(
+        _lib._class_NSObject1, _lib._sel_isSubclassOfClass_1, aClass._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_resolveClassMethod;
   static bool resolveClassMethod(NativeLibrary _lib, ffi.Pointer<ObjCSel> sel) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_resolveClassMethod ??= _registerName(_lib, "resolveClassMethod:");
-    return _lib._objc_msgSend_3(_class!, _sel_resolveClassMethod!, sel);
+    return _lib._objc_msgSend_3(
+        _lib._class_NSObject1, _lib._sel_resolveClassMethod_1, sel);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_resolveInstanceMethod;
   static bool resolveInstanceMethod(
       NativeLibrary _lib, ffi.Pointer<ObjCSel> sel) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_resolveInstanceMethod ??=
-        _registerName(_lib, "resolveInstanceMethod:");
-    return _lib._objc_msgSend_3(_class!, _sel_resolveInstanceMethod!, sel);
+    return _lib._objc_msgSend_3(
+        _lib._class_NSObject1, _lib._sel_resolveInstanceMethod_1, sel);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_hash;
   static int hash(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_hash ??= _registerName(_lib, "hash");
-    return _lib._objc_msgSend_11(_class!, _sel_hash!);
+    return _lib._objc_msgSend_11(_lib._class_NSObject1, _lib._sel_hash1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_superclass;
   static NSObject superclass(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_superclass ??= _registerName(_lib, "superclass");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_superclass!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_superclass1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_class1;
   static NSObject class1(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_class1 ??= _registerName(_lib, "class");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_class1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_class1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_description;
   static NSString description(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_description ??= _registerName(_lib, "description");
-    final _ret = _lib._objc_msgSend_14(_class!, _sel_description!);
+    final _ret =
+        _lib._objc_msgSend_14(_lib._class_NSObject1, _lib._sel_description1);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_debugDescription;
   static NSString debugDescription(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_debugDescription ??= _registerName(_lib, "debugDescription");
-    final _ret = _lib._objc_msgSend_14(_class!, _sel_debugDescription!);
+    final _ret = _lib._objc_msgSend_14(
+        _lib._class_NSObject1, _lib._sel_debugDescription1);
     return NSString._(_ret, _lib);
   }
 }
 
 typedef instancetype = ffi.Pointer<ObjCObject>;
 
-class ObjCObject extends ffi.Opaque {}
-
 class _NSZone extends ffi.Opaque {}
 
-class ObjCSel extends ffi.Opaque {}
-
 typedef IMP = ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>;
 
 class NSMethodSignature extends _ObjCWrapper {
   NSMethodSignature._(ffi.Pointer<ObjCObject> id, NativeLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSMethodSignature castFrom<T extends _ObjCWrapper>(T other) {
     return NSMethodSignature._(other._id, other._lib);
   }
@@ -663,8 +635,6 @@
 class NSString extends _ObjCWrapper {
   NSString._(ffi.Pointer<ObjCObject> id, NativeLibrary lib) : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSString castFrom<T extends _ObjCWrapper>(T other) {
     return NSString._(other._id, other._lib);
   }
@@ -679,21 +649,15 @@
   @override
   String toString() => UTF8String().cast<pkg_ffi.Utf8>().toDartString();
 
-  static ffi.Pointer<ObjCSel>? _sel_stringWithCString_encoding;
   static NSString stringWithCString_encoding(
       NativeLibrary _lib, ffi.Pointer<pkg_ffi.Char> cString, int enc) {
-    _class ??= _getClass(_lib, "NSString");
-    _sel_stringWithCString_encoding ??=
-        _registerName(_lib, "stringWithCString:encoding:");
-    final _ret = _lib._objc_msgSend_12(
-        _class!, _sel_stringWithCString_encoding!, cString, enc);
+    final _ret = _lib._objc_msgSend_12(_lib._class_NSString1,
+        _lib._sel_stringWithCString_encoding_1, cString, enc);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_UTF8String;
   ffi.Pointer<pkg_ffi.Char> UTF8String() {
-    _sel_UTF8String ??= _registerName(_lib, "UTF8String");
-    return _lib._objc_msgSend_13(_id, _sel_UTF8String!);
+    return _lib._objc_msgSend_13(_id, _lib._sel_UTF8String1);
   }
 }
 
diff --git a/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_interface_bindings.dart b/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_interface_bindings.dart
index e85cef0..551e558 100644
--- a/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_interface_bindings.dart
+++ b/pkgs/ffigen/test/header_parser_tests/expected_bindings/_expected_objc_interface_bindings.dart
@@ -20,6 +20,13 @@
           lookup)
       : _lookup = lookup;
 
+  ffi.Pointer<ObjCSel> _registerName1(String name) {
+    final cstr = name.toNativeUtf8();
+    final sel = _sel_registerName(cstr.cast());
+    pkg_ffi.calloc.free(cstr);
+    return sel;
+  }
+
   ffi.Pointer<ObjCSel> _sel_registerName(
     ffi.Pointer<pkg_ffi.Char> str,
   ) {
@@ -35,6 +42,13 @@
   late final __sel_registerName = __sel_registerNamePtr
       .asFunction<ffi.Pointer<ObjCSel> Function(ffi.Pointer<pkg_ffi.Char>)>();
 
+  ffi.Pointer<ObjCObject> _getClass1(String name) {
+    final cstr = name.toNativeUtf8();
+    final clazz = _objc_getClass(cstr.cast());
+    pkg_ffi.calloc.free(cstr);
+    return clazz;
+  }
+
   ffi.Pointer<ObjCObject> _objc_getClass(
     ffi.Pointer<pkg_ffi.Char> str,
   ) {
@@ -50,6 +64,9 @@
   late final __objc_getClass = __objc_getClassPtr.asFunction<
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<pkg_ffi.Char>)>();
 
+  late final ffi.Pointer<ObjCObject> _class_Foo1 = _getClass1("Foo");
+  late final ffi.Pointer<ObjCObject> _class_NSObject1 = _getClass1("NSObject");
+  late final ffi.Pointer<ObjCSel> _sel_load1 = _registerName1("load");
   void _objc_msgSend_0(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -67,6 +84,9 @@
   late final __objc_msgSend_0 = __objc_msgSend_0Ptr.asFunction<
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initialize1 =
+      _registerName1("initialize");
+  late final ffi.Pointer<ObjCSel> _sel_init1 = _registerName1("init");
   instancetype _objc_msgSend_1(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -84,6 +104,9 @@
   late final __objc_msgSend_1 = __objc_msgSend_1Ptr.asFunction<
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_new1 = _registerName1("new");
+  late final ffi.Pointer<ObjCSel> _sel_allocWithZone_1 =
+      _registerName1("allocWithZone:");
   instancetype _objc_msgSend_2(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -104,6 +127,18 @@
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<_NSZone>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_alloc1 = _registerName1("alloc");
+  late final ffi.Pointer<ObjCSel> _sel_dealloc1 = _registerName1("dealloc");
+  late final ffi.Pointer<ObjCSel> _sel_finalize1 = _registerName1("finalize");
+  late final ffi.Pointer<ObjCSel> _sel_copy1 = _registerName1("copy");
+  late final ffi.Pointer<ObjCSel> _sel_mutableCopy1 =
+      _registerName1("mutableCopy");
+  late final ffi.Pointer<ObjCSel> _sel_copyWithZone_1 =
+      _registerName1("copyWithZone:");
+  late final ffi.Pointer<ObjCSel> _sel_mutableCopyWithZone_1 =
+      _registerName1("mutableCopyWithZone:");
+  late final ffi.Pointer<ObjCSel> _sel_instancesRespondToSelector_1 =
+      _registerName1("instancesRespondToSelector:");
   bool _objc_msgSend_3(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -125,6 +160,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_conformsToProtocol_1 =
+      _registerName1("conformsToProtocol:");
   bool _objc_msgSend_4(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -146,6 +183,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_methodForSelector_1 =
+      _registerName1("methodForSelector:");
   IMP _objc_msgSend_5(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -166,6 +205,10 @@
       IMP Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_instanceMethodForSelector_1 =
+      _registerName1("instanceMethodForSelector:");
+  late final ffi.Pointer<ObjCSel> _sel_doesNotRecognizeSelector_1 =
+      _registerName1("doesNotRecognizeSelector:");
   void _objc_msgSend_6(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -186,6 +229,8 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_forwardingTargetForSelector_1 =
+      _registerName1("forwardingTargetForSelector:");
   ffi.Pointer<ObjCObject> _objc_msgSend_7(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -206,6 +251,8 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_forwardInvocation_1 =
+      _registerName1("forwardInvocation:");
   void _objc_msgSend_8(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -226,6 +273,10 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCObject> _class_NSMethodSignature1 =
+      _getClass1("NSMethodSignature");
+  late final ffi.Pointer<ObjCSel> _sel_methodSignatureForSelector_1 =
+      _registerName1("methodSignatureForSelector:");
   ffi.Pointer<ObjCObject> _objc_msgSend_9(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -246,6 +297,10 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_instanceMethodSignatureForSelector_1 =
+      _registerName1("instanceMethodSignatureForSelector:");
+  late final ffi.Pointer<ObjCSel> _sel_allowsWeakReference1 =
+      _registerName1("allowsWeakReference");
   bool _objc_msgSend_10(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -264,6 +319,15 @@
   late final __objc_msgSend_10 = __objc_msgSend_10Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_retainWeakReference1 =
+      _registerName1("retainWeakReference");
+  late final ffi.Pointer<ObjCSel> _sel_isSubclassOfClass_1 =
+      _registerName1("isSubclassOfClass:");
+  late final ffi.Pointer<ObjCSel> _sel_resolveClassMethod_1 =
+      _registerName1("resolveClassMethod:");
+  late final ffi.Pointer<ObjCSel> _sel_resolveInstanceMethod_1 =
+      _registerName1("resolveInstanceMethod:");
+  late final ffi.Pointer<ObjCSel> _sel_hash1 = _registerName1("hash");
   int _objc_msgSend_11(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -281,6 +345,12 @@
   late final __objc_msgSend_11 = __objc_msgSend_11Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_superclass1 =
+      _registerName1("superclass");
+  late final ffi.Pointer<ObjCSel> _sel_class1 = _registerName1("class");
+  late final ffi.Pointer<ObjCObject> _class_NSString1 = _getClass1("NSString");
+  late final ffi.Pointer<ObjCSel> _sel_stringWithCString_encoding_1 =
+      _registerName1("stringWithCString:encoding:");
   ffi.Pointer<ObjCObject> _objc_msgSend_12(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -306,6 +376,8 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<pkg_ffi.Char>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_UTF8String1 =
+      _registerName1("UTF8String");
   ffi.Pointer<pkg_ffi.Char> _objc_msgSend_13(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -324,6 +396,8 @@
       ffi.Pointer<pkg_ffi.Char> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_description1 =
+      _registerName1("description");
   ffi.Pointer<ObjCObject> _objc_msgSend_14(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -342,6 +416,10 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_debugDescription1 =
+      _registerName1("debugDescription");
+  late final ffi.Pointer<ObjCSel> _sel_someProperty1 =
+      _registerName1("someProperty");
   int _objc_msgSend_15(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -359,6 +437,8 @@
   late final __objc_msgSend_15 = __objc_msgSend_15Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_setSomeProperty_1 =
+      _registerName1("setSomeProperty:");
   void _objc_msgSend_16(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -378,6 +458,16 @@
   late final __objc_msgSend_16 = __objc_msgSend_16Ptr.asFunction<
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_readOnlyProperty1 =
+      _registerName1("readOnlyProperty");
+  late final ffi.Pointer<ObjCSel> _sel_classReadOnlyProperty1 =
+      _registerName1("classReadOnlyProperty");
+  late final ffi.Pointer<ObjCSel> _sel_classReadWriteProperty1 =
+      _registerName1("classReadWriteProperty");
+  late final ffi.Pointer<ObjCSel> _sel_setClassReadWriteProperty_1 =
+      _registerName1("setClassReadWriteProperty:");
+  late final ffi.Pointer<ObjCSel> _sel_aClassMethod_1 =
+      _registerName1("aClassMethod:");
   ffi.Pointer<ObjCObject> _objc_msgSend_17(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -398,6 +488,8 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, double)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_anInstanceMethod_withOtherArg_1 =
+      _registerName1("anInstanceMethod:withOtherArg:");
   int _objc_msgSend_18(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -424,20 +516,6 @@
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCObject>)>();
 }
 
-ffi.Pointer<ObjCSel> _registerName(NativeLibrary _lib, String name) {
-  final cstr = name.toNativeUtf8();
-  final sel = _lib._sel_registerName(cstr.cast());
-  pkg_ffi.calloc.free(cstr);
-  return sel;
-}
-
-ffi.Pointer<ObjCObject> _getClass(NativeLibrary _lib, String name) {
-  final cstr = name.toNativeUtf8();
-  final clazz = _lib._objc_getClass(cstr.cast());
-  pkg_ffi.calloc.free(cstr);
-  return clazz;
-}
-
 class _ObjCWrapper {
   final ffi.Pointer<ObjCObject> _id;
   final NativeLibrary _lib;
@@ -447,350 +525,240 @@
 class Foo extends NSObject {
   Foo._(ffi.Pointer<ObjCObject> id, NativeLibrary lib) : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static Foo castFrom<T extends _ObjCWrapper>(T other) {
     return Foo._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_someProperty;
   int get someProperty {
-    _sel_someProperty ??= _registerName(_lib, "someProperty");
-    return _lib._objc_msgSend_15(_id, _sel_someProperty!);
+    return _lib._objc_msgSend_15(_id, _lib._sel_someProperty1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_someProperty1;
   set someProperty(int value) {
-    _sel_someProperty1 ??= _registerName(_lib, "setSomeProperty:");
-    _lib._objc_msgSend_16(_id, _sel_someProperty1!, value);
+    _lib._objc_msgSend_16(_id, _lib._sel_setSomeProperty_1, value);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_readOnlyProperty;
   int get readOnlyProperty {
-    _sel_readOnlyProperty ??= _registerName(_lib, "readOnlyProperty");
-    return _lib._objc_msgSend_15(_id, _sel_readOnlyProperty!);
+    return _lib._objc_msgSend_15(_id, _lib._sel_readOnlyProperty1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_classReadOnlyProperty;
   static int getClassReadOnlyProperty(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "Foo");
-    _sel_classReadOnlyProperty ??= _registerName(_lib, "classReadOnlyProperty");
-    return _lib._objc_msgSend_15(_class!, _sel_classReadOnlyProperty!);
+    return _lib._objc_msgSend_15(
+        _lib._class_Foo1, _lib._sel_classReadOnlyProperty1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_classReadWriteProperty;
   static int getClassReadWriteProperty(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "Foo");
-    _sel_classReadWriteProperty ??=
-        _registerName(_lib, "classReadWriteProperty");
-    return _lib._objc_msgSend_15(_class!, _sel_classReadWriteProperty!);
+    return _lib._objc_msgSend_15(
+        _lib._class_Foo1, _lib._sel_classReadWriteProperty1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_classReadWriteProperty1;
   static void setClassReadWriteProperty(NativeLibrary _lib, int value) {
-    _class ??= _getClass(_lib, "Foo");
-    _sel_classReadWriteProperty1 ??=
-        _registerName(_lib, "setClassReadWriteProperty:");
-    _lib._objc_msgSend_16(_class!, _sel_classReadWriteProperty1!, value);
+    _lib._objc_msgSend_16(
+        _lib._class_Foo1, _lib._sel_setClassReadWriteProperty_1, value);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_aClassMethod;
   static Foo aClassMethod(NativeLibrary _lib, double someArg) {
-    _class ??= _getClass(_lib, "Foo");
-    _sel_aClassMethod ??= _registerName(_lib, "aClassMethod:");
-    final _ret = _lib._objc_msgSend_17(_class!, _sel_aClassMethod!, someArg);
+    final _ret = _lib._objc_msgSend_17(
+        _lib._class_Foo1, _lib._sel_aClassMethod_1, someArg);
     return Foo._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_anInstanceMethod_withOtherArg;
   int anInstanceMethod_withOtherArg(NSObject someArg, NSObject otherArg) {
-    _sel_anInstanceMethod_withOtherArg ??=
-        _registerName(_lib, "anInstanceMethod:withOtherArg:");
-    return _lib._objc_msgSend_18(
-        _id, _sel_anInstanceMethod_withOtherArg!, someArg._id, otherArg._id);
+    return _lib._objc_msgSend_18(_id, _lib._sel_anInstanceMethod_withOtherArg_1,
+        someArg._id, otherArg._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static Foo new1(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "Foo");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_Foo1, _lib._sel_new1);
     return Foo._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static Foo alloc(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "Foo");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_Foo1, _lib._sel_alloc1);
     return Foo._(_ret, _lib);
   }
 }
 
+class ObjCSel extends ffi.Opaque {}
+
+class ObjCObject extends ffi.Opaque {}
+
 class NSObject extends _ObjCWrapper {
   NSObject._(ffi.Pointer<ObjCObject> id, NativeLibrary lib) : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSObject castFrom<T extends _ObjCWrapper>(T other) {
     return NSObject._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_load;
   static void load(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_load ??= _registerName(_lib, "load");
-    _lib._objc_msgSend_0(_class!, _sel_load!);
+    _lib._objc_msgSend_0(_lib._class_NSObject1, _lib._sel_load1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initialize;
   static void initialize(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_initialize ??= _registerName(_lib, "initialize");
-    _lib._objc_msgSend_0(_class!, _sel_initialize!);
+    _lib._objc_msgSend_0(_lib._class_NSObject1, _lib._sel_initialize1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_init;
   NSObject init() {
-    _sel_init ??= _registerName(_lib, "init");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_init!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_init1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSObject new1(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_new1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_allocWithZone;
   static NSObject allocWithZone(NativeLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_allocWithZone ??= _registerName(_lib, "allocWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_allocWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_allocWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSObject alloc(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_alloc1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_dealloc;
   void dealloc() {
-    _sel_dealloc ??= _registerName(_lib, "dealloc");
-    _lib._objc_msgSend_0(_id, _sel_dealloc!);
+    _lib._objc_msgSend_0(_id, _lib._sel_dealloc1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_finalize;
   void finalize() {
-    _sel_finalize ??= _registerName(_lib, "finalize");
-    _lib._objc_msgSend_0(_id, _sel_finalize!);
+    _lib._objc_msgSend_0(_id, _lib._sel_finalize1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_copy;
   NSObject copy() {
-    _sel_copy ??= _registerName(_lib, "copy");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_copy!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_copy1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_mutableCopy;
   NSObject mutableCopy() {
-    _sel_mutableCopy ??= _registerName(_lib, "mutableCopy");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_mutableCopy!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_mutableCopy1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_copyWithZone;
   static NSObject copyWithZone(NativeLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_copyWithZone ??= _registerName(_lib, "copyWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_copyWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_copyWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_mutableCopyWithZone;
   static NSObject mutableCopyWithZone(
       NativeLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_mutableCopyWithZone ??= _registerName(_lib, "mutableCopyWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_mutableCopyWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_mutableCopyWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instancesRespondToSelector;
   static bool instancesRespondToSelector(
       NativeLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instancesRespondToSelector ??=
-        _registerName(_lib, "instancesRespondToSelector:");
-    return _lib._objc_msgSend_3(
-        _class!, _sel_instancesRespondToSelector!, aSelector);
+    return _lib._objc_msgSend_3(_lib._class_NSObject1,
+        _lib._sel_instancesRespondToSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_conformsToProtocol;
   static bool conformsToProtocol(NativeLibrary _lib, NSObject protocol) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_conformsToProtocol ??= _registerName(_lib, "conformsToProtocol:");
     return _lib._objc_msgSend_4(
-        _class!, _sel_conformsToProtocol!, protocol._id);
+        _lib._class_NSObject1, _lib._sel_conformsToProtocol_1, protocol._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_methodForSelector;
   IMP methodForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_methodForSelector ??= _registerName(_lib, "methodForSelector:");
-    return _lib._objc_msgSend_5(_id, _sel_methodForSelector!, aSelector);
+    return _lib._objc_msgSend_5(_id, _lib._sel_methodForSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instanceMethodForSelector;
   static IMP instanceMethodForSelector(
       NativeLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instanceMethodForSelector ??=
-        _registerName(_lib, "instanceMethodForSelector:");
-    return _lib._objc_msgSend_5(
-        _class!, _sel_instanceMethodForSelector!, aSelector);
+    return _lib._objc_msgSend_5(_lib._class_NSObject1,
+        _lib._sel_instanceMethodForSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_doesNotRecognizeSelector;
   void doesNotRecognizeSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_doesNotRecognizeSelector ??=
-        _registerName(_lib, "doesNotRecognizeSelector:");
-    _lib._objc_msgSend_6(_id, _sel_doesNotRecognizeSelector!, aSelector);
+    _lib._objc_msgSend_6(_id, _lib._sel_doesNotRecognizeSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_forwardingTargetForSelector;
   NSObject forwardingTargetForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_forwardingTargetForSelector ??=
-        _registerName(_lib, "forwardingTargetForSelector:");
-    final _ret =
-        _lib._objc_msgSend_7(_id, _sel_forwardingTargetForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_7(
+        _id, _lib._sel_forwardingTargetForSelector_1, aSelector);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_forwardInvocation;
   void forwardInvocation(NSObject anInvocation) {
-    _sel_forwardInvocation ??= _registerName(_lib, "forwardInvocation:");
-    _lib._objc_msgSend_8(_id, _sel_forwardInvocation!, anInvocation._id);
+    _lib._objc_msgSend_8(_id, _lib._sel_forwardInvocation_1, anInvocation._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_methodSignatureForSelector;
   NSMethodSignature methodSignatureForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_methodSignatureForSelector ??=
-        _registerName(_lib, "methodSignatureForSelector:");
-    final _ret =
-        _lib._objc_msgSend_9(_id, _sel_methodSignatureForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_9(
+        _id, _lib._sel_methodSignatureForSelector_1, aSelector);
     return NSMethodSignature._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instanceMethodSignatureForSelector;
   static NSMethodSignature instanceMethodSignatureForSelector(
       NativeLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instanceMethodSignatureForSelector ??=
-        _registerName(_lib, "instanceMethodSignatureForSelector:");
-    final _ret = _lib._objc_msgSend_9(
-        _class!, _sel_instanceMethodSignatureForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_9(_lib._class_NSObject1,
+        _lib._sel_instanceMethodSignatureForSelector_1, aSelector);
     return NSMethodSignature._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_allowsWeakReference;
   bool allowsWeakReference() {
-    _sel_allowsWeakReference ??= _registerName(_lib, "allowsWeakReference");
-    return _lib._objc_msgSend_10(_id, _sel_allowsWeakReference!);
+    return _lib._objc_msgSend_10(_id, _lib._sel_allowsWeakReference1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_retainWeakReference;
   bool retainWeakReference() {
-    _sel_retainWeakReference ??= _registerName(_lib, "retainWeakReference");
-    return _lib._objc_msgSend_10(_id, _sel_retainWeakReference!);
+    return _lib._objc_msgSend_10(_id, _lib._sel_retainWeakReference1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_isSubclassOfClass;
   static bool isSubclassOfClass(NativeLibrary _lib, NSObject aClass) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_isSubclassOfClass ??= _registerName(_lib, "isSubclassOfClass:");
-    return _lib._objc_msgSend_4(_class!, _sel_isSubclassOfClass!, aClass._id);
+    return _lib._objc_msgSend_4(
+        _lib._class_NSObject1, _lib._sel_isSubclassOfClass_1, aClass._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_resolveClassMethod;
   static bool resolveClassMethod(NativeLibrary _lib, ffi.Pointer<ObjCSel> sel) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_resolveClassMethod ??= _registerName(_lib, "resolveClassMethod:");
-    return _lib._objc_msgSend_3(_class!, _sel_resolveClassMethod!, sel);
+    return _lib._objc_msgSend_3(
+        _lib._class_NSObject1, _lib._sel_resolveClassMethod_1, sel);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_resolveInstanceMethod;
   static bool resolveInstanceMethod(
       NativeLibrary _lib, ffi.Pointer<ObjCSel> sel) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_resolveInstanceMethod ??=
-        _registerName(_lib, "resolveInstanceMethod:");
-    return _lib._objc_msgSend_3(_class!, _sel_resolveInstanceMethod!, sel);
+    return _lib._objc_msgSend_3(
+        _lib._class_NSObject1, _lib._sel_resolveInstanceMethod_1, sel);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_hash;
   static int hash(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_hash ??= _registerName(_lib, "hash");
-    return _lib._objc_msgSend_11(_class!, _sel_hash!);
+    return _lib._objc_msgSend_11(_lib._class_NSObject1, _lib._sel_hash1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_superclass;
   static NSObject superclass(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_superclass ??= _registerName(_lib, "superclass");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_superclass!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_superclass1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_class1;
   static NSObject class1(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_class1 ??= _registerName(_lib, "class");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_class1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_class1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_description;
   static NSString description(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_description ??= _registerName(_lib, "description");
-    final _ret = _lib._objc_msgSend_14(_class!, _sel_description!);
+    final _ret =
+        _lib._objc_msgSend_14(_lib._class_NSObject1, _lib._sel_description1);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_debugDescription;
   static NSString debugDescription(NativeLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_debugDescription ??= _registerName(_lib, "debugDescription");
-    final _ret = _lib._objc_msgSend_14(_class!, _sel_debugDescription!);
+    final _ret = _lib._objc_msgSend_14(
+        _lib._class_NSObject1, _lib._sel_debugDescription1);
     return NSString._(_ret, _lib);
   }
 }
 
 typedef instancetype = ffi.Pointer<ObjCObject>;
 
-class ObjCObject extends ffi.Opaque {}
-
 class _NSZone extends ffi.Opaque {}
 
-class ObjCSel extends ffi.Opaque {}
-
 typedef IMP = ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>;
 
 class NSMethodSignature extends _ObjCWrapper {
   NSMethodSignature._(ffi.Pointer<ObjCObject> id, NativeLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSMethodSignature castFrom<T extends _ObjCWrapper>(T other) {
     return NSMethodSignature._(other._id, other._lib);
   }
@@ -801,8 +769,6 @@
 class NSString extends _ObjCWrapper {
   NSString._(ffi.Pointer<ObjCObject> id, NativeLibrary lib) : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSString castFrom<T extends _ObjCWrapper>(T other) {
     return NSString._(other._id, other._lib);
   }
@@ -817,21 +783,15 @@
   @override
   String toString() => UTF8String().cast<pkg_ffi.Utf8>().toDartString();
 
-  static ffi.Pointer<ObjCSel>? _sel_stringWithCString_encoding;
   static NSString stringWithCString_encoding(
       NativeLibrary _lib, ffi.Pointer<pkg_ffi.Char> cString, int enc) {
-    _class ??= _getClass(_lib, "NSString");
-    _sel_stringWithCString_encoding ??=
-        _registerName(_lib, "stringWithCString:encoding:");
-    final _ret = _lib._objc_msgSend_12(
-        _class!, _sel_stringWithCString_encoding!, cString, enc);
+    final _ret = _lib._objc_msgSend_12(_lib._class_NSString1,
+        _lib._sel_stringWithCString_encoding_1, cString, enc);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_UTF8String;
   ffi.Pointer<pkg_ffi.Char> UTF8String() {
-    _sel_UTF8String ??= _registerName(_lib, "UTF8String");
-    return _lib._objc_msgSend_13(_id, _sel_UTF8String!);
+    return _lib._objc_msgSend_13(_id, _lib._sel_UTF8String1);
   }
 }
 
diff --git a/pkgs/ffigen/test/native_objc_test/method_bindings.dart b/pkgs/ffigen/test/native_objc_test/method_bindings.dart
index d8390d3..2ebbe59 100644
--- a/pkgs/ffigen/test/native_objc_test/method_bindings.dart
+++ b/pkgs/ffigen/test/native_objc_test/method_bindings.dart
@@ -107,6 +107,13 @@
   set kCFAllocatorUseContext(CFAllocatorRef value) =>
       _kCFAllocatorUseContext.value = value;
 
+  ffi.Pointer<ObjCSel> _registerName1(String name) {
+    final cstr = name.toNativeUtf8();
+    final sel = _sel_registerName(cstr.cast());
+    pkg_ffi.calloc.free(cstr);
+    return sel;
+  }
+
   ffi.Pointer<ObjCSel> _sel_registerName(
     ffi.Pointer<pkg_ffi.Char> str,
   ) {
@@ -122,6 +129,13 @@
   late final __sel_registerName = __sel_registerNamePtr
       .asFunction<ffi.Pointer<ObjCSel> Function(ffi.Pointer<pkg_ffi.Char>)>();
 
+  ffi.Pointer<ObjCObject> _getClass1(String name) {
+    final cstr = name.toNativeUtf8();
+    final clazz = _objc_getClass(cstr.cast());
+    pkg_ffi.calloc.free(cstr);
+    return clazz;
+  }
+
   ffi.Pointer<ObjCObject> _objc_getClass(
     ffi.Pointer<pkg_ffi.Char> str,
   ) {
@@ -137,6 +151,10 @@
   late final __objc_getClass = __objc_getClassPtr.asFunction<
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<pkg_ffi.Char>)>();
 
+  late final ffi.Pointer<ObjCObject> _class_MethodInterface1 =
+      _getClass1("MethodInterface");
+  late final ffi.Pointer<ObjCObject> _class_NSObject1 = _getClass1("NSObject");
+  late final ffi.Pointer<ObjCSel> _sel_load1 = _registerName1("load");
   void _objc_msgSend_0(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -154,6 +172,9 @@
   late final __objc_msgSend_0 = __objc_msgSend_0Ptr.asFunction<
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initialize1 =
+      _registerName1("initialize");
+  late final ffi.Pointer<ObjCSel> _sel_init1 = _registerName1("init");
   instancetype _objc_msgSend_1(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -171,6 +192,9 @@
   late final __objc_msgSend_1 = __objc_msgSend_1Ptr.asFunction<
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_new1 = _registerName1("new");
+  late final ffi.Pointer<ObjCSel> _sel_allocWithZone_1 =
+      _registerName1("allocWithZone:");
   instancetype _objc_msgSend_2(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -191,6 +215,18 @@
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<_NSZone>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_alloc1 = _registerName1("alloc");
+  late final ffi.Pointer<ObjCSel> _sel_dealloc1 = _registerName1("dealloc");
+  late final ffi.Pointer<ObjCSel> _sel_finalize1 = _registerName1("finalize");
+  late final ffi.Pointer<ObjCSel> _sel_copy1 = _registerName1("copy");
+  late final ffi.Pointer<ObjCSel> _sel_mutableCopy1 =
+      _registerName1("mutableCopy");
+  late final ffi.Pointer<ObjCSel> _sel_copyWithZone_1 =
+      _registerName1("copyWithZone:");
+  late final ffi.Pointer<ObjCSel> _sel_mutableCopyWithZone_1 =
+      _registerName1("mutableCopyWithZone:");
+  late final ffi.Pointer<ObjCSel> _sel_instancesRespondToSelector_1 =
+      _registerName1("instancesRespondToSelector:");
   bool _objc_msgSend_3(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -212,6 +248,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_conformsToProtocol_1 =
+      _registerName1("conformsToProtocol:");
   bool _objc_msgSend_4(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -233,6 +271,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_methodForSelector_1 =
+      _registerName1("methodForSelector:");
   IMP _objc_msgSend_5(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -253,6 +293,10 @@
       IMP Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_instanceMethodForSelector_1 =
+      _registerName1("instanceMethodForSelector:");
+  late final ffi.Pointer<ObjCSel> _sel_doesNotRecognizeSelector_1 =
+      _registerName1("doesNotRecognizeSelector:");
   void _objc_msgSend_6(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -273,6 +317,8 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_forwardingTargetForSelector_1 =
+      _registerName1("forwardingTargetForSelector:");
   ffi.Pointer<ObjCObject> _objc_msgSend_7(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -293,6 +339,8 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_forwardInvocation_1 =
+      _registerName1("forwardInvocation:");
   void _objc_msgSend_8(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -313,6 +361,10 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCObject> _class_NSMethodSignature1 =
+      _getClass1("NSMethodSignature");
+  late final ffi.Pointer<ObjCSel> _sel_methodSignatureForSelector_1 =
+      _registerName1("methodSignatureForSelector:");
   ffi.Pointer<ObjCObject> _objc_msgSend_9(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -333,6 +385,10 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_instanceMethodSignatureForSelector_1 =
+      _registerName1("instanceMethodSignatureForSelector:");
+  late final ffi.Pointer<ObjCSel> _sel_allowsWeakReference1 =
+      _registerName1("allowsWeakReference");
   bool _objc_msgSend_10(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -351,6 +407,15 @@
   late final __objc_msgSend_10 = __objc_msgSend_10Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_retainWeakReference1 =
+      _registerName1("retainWeakReference");
+  late final ffi.Pointer<ObjCSel> _sel_isSubclassOfClass_1 =
+      _registerName1("isSubclassOfClass:");
+  late final ffi.Pointer<ObjCSel> _sel_resolveClassMethod_1 =
+      _registerName1("resolveClassMethod:");
+  late final ffi.Pointer<ObjCSel> _sel_resolveInstanceMethod_1 =
+      _registerName1("resolveInstanceMethod:");
+  late final ffi.Pointer<ObjCSel> _sel_hash1 = _registerName1("hash");
   int _objc_msgSend_11(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -368,6 +433,12 @@
   late final __objc_msgSend_11 = __objc_msgSend_11Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_superclass1 =
+      _registerName1("superclass");
+  late final ffi.Pointer<ObjCSel> _sel_class1 = _registerName1("class");
+  late final ffi.Pointer<ObjCObject> _class_NSString1 = _getClass1("NSString");
+  late final ffi.Pointer<ObjCSel> _sel_stringWithCString_encoding_1 =
+      _registerName1("stringWithCString:encoding:");
   ffi.Pointer<ObjCObject> _objc_msgSend_12(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -393,6 +464,8 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<pkg_ffi.Char>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_UTF8String1 =
+      _registerName1("UTF8String");
   ffi.Pointer<pkg_ffi.Char> _objc_msgSend_13(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -411,6 +484,8 @@
       ffi.Pointer<pkg_ffi.Char> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_description1 =
+      _registerName1("description");
   ffi.Pointer<ObjCObject> _objc_msgSend_14(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -429,6 +504,9 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_debugDescription1 =
+      _registerName1("debugDescription");
+  late final ffi.Pointer<ObjCSel> _sel_add1 = _registerName1("add");
   int _objc_msgSend_15(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -446,6 +524,7 @@
   late final __objc_msgSend_15 = __objc_msgSend_15Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_add_1 = _registerName1("add:");
   int _objc_msgSend_16(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -465,6 +544,7 @@
   late final __objc_msgSend_16 = __objc_msgSend_16Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_add_Y_1 = _registerName1("add:Y:");
   int _objc_msgSend_17(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -486,6 +566,7 @@
   late final __objc_msgSend_17 = __objc_msgSend_17Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_add_Y_Z_1 = _registerName1("add:Y:Z:");
   int _objc_msgSend_18(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -509,6 +590,11 @@
   late final __objc_msgSend_18 = __objc_msgSend_18Ptr.asFunction<
       int Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int, int, int)>();
+
+  late final ffi.Pointer<ObjCSel> _sel_sub1 = _registerName1("sub");
+  late final ffi.Pointer<ObjCSel> _sel_sub_1 = _registerName1("sub:");
+  late final ffi.Pointer<ObjCSel> _sel_sub_Y_1 = _registerName1("sub:Y:");
+  late final ffi.Pointer<ObjCSel> _sel_sub_Y_Z_1 = _registerName1("sub:Y:Z:");
 }
 
 abstract class NSComparisonResult {
@@ -607,20 +693,6 @@
     ffi.NativeFunction<
         CFIndex Function(CFIndex, CFOptionFlags, ffi.Pointer<ffi.Void>)>>;
 
-ffi.Pointer<ObjCSel> _registerName(MethodTestObjCLibrary _lib, String name) {
-  final cstr = name.toNativeUtf8();
-  final sel = _lib._sel_registerName(cstr.cast());
-  pkg_ffi.calloc.free(cstr);
-  return sel;
-}
-
-ffi.Pointer<ObjCObject> _getClass(MethodTestObjCLibrary _lib, String name) {
-  final cstr = name.toNativeUtf8();
-  final clazz = _lib._objc_getClass(cstr.cast());
-  pkg_ffi.calloc.free(cstr);
-  return clazz;
-}
-
 class _ObjCWrapper {
   final ffi.Pointer<ObjCObject> _id;
   final MethodTestObjCLibrary _lib;
@@ -631,350 +703,244 @@
   MethodInterface._(ffi.Pointer<ObjCObject> id, MethodTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static MethodInterface castFrom<T extends _ObjCWrapper>(T other) {
     return MethodInterface._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_add;
   int add() {
-    _sel_add ??= _registerName(_lib, "add");
-    return _lib._objc_msgSend_15(_id, _sel_add!);
+    return _lib._objc_msgSend_15(_id, _lib._sel_add1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_add1;
   int add1(int x) {
-    _sel_add1 ??= _registerName(_lib, "add:");
-    return _lib._objc_msgSend_16(_id, _sel_add1!, x);
+    return _lib._objc_msgSend_16(_id, _lib._sel_add_1, x);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_add_Y;
   int add_Y(int x, int y) {
-    _sel_add_Y ??= _registerName(_lib, "add:Y:");
-    return _lib._objc_msgSend_17(_id, _sel_add_Y!, x, y);
+    return _lib._objc_msgSend_17(_id, _lib._sel_add_Y_1, x, y);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_add_Y_Z;
   int add_Y_Z(int x, int y, int z) {
-    _sel_add_Y_Z ??= _registerName(_lib, "add:Y:Z:");
-    return _lib._objc_msgSend_18(_id, _sel_add_Y_Z!, x, y, z);
+    return _lib._objc_msgSend_18(_id, _lib._sel_add_Y_Z_1, x, y, z);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_sub;
   static int sub(MethodTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "MethodInterface");
-    _sel_sub ??= _registerName(_lib, "sub");
-    return _lib._objc_msgSend_15(_class!, _sel_sub!);
+    return _lib._objc_msgSend_15(_lib._class_MethodInterface1, _lib._sel_sub1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_sub1;
   static int sub1(MethodTestObjCLibrary _lib, int x) {
-    _class ??= _getClass(_lib, "MethodInterface");
-    _sel_sub1 ??= _registerName(_lib, "sub:");
-    return _lib._objc_msgSend_16(_class!, _sel_sub1!, x);
+    return _lib._objc_msgSend_16(
+        _lib._class_MethodInterface1, _lib._sel_sub_1, x);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_sub_Y;
   static int sub_Y(MethodTestObjCLibrary _lib, int x, int y) {
-    _class ??= _getClass(_lib, "MethodInterface");
-    _sel_sub_Y ??= _registerName(_lib, "sub:Y:");
-    return _lib._objc_msgSend_17(_class!, _sel_sub_Y!, x, y);
+    return _lib._objc_msgSend_17(
+        _lib._class_MethodInterface1, _lib._sel_sub_Y_1, x, y);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_sub_Y_Z;
   static int sub_Y_Z(MethodTestObjCLibrary _lib, int x, int y, int z) {
-    _class ??= _getClass(_lib, "MethodInterface");
-    _sel_sub_Y_Z ??= _registerName(_lib, "sub:Y:Z:");
-    return _lib._objc_msgSend_18(_class!, _sel_sub_Y_Z!, x, y, z);
+    return _lib._objc_msgSend_18(
+        _lib._class_MethodInterface1, _lib._sel_sub_Y_Z_1, x, y, z);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static MethodInterface new1(MethodTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "MethodInterface");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_MethodInterface1, _lib._sel_new1);
     return MethodInterface._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static MethodInterface alloc(MethodTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "MethodInterface");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_MethodInterface1, _lib._sel_alloc1);
     return MethodInterface._(_ret, _lib);
   }
 }
 
+class ObjCSel extends ffi.Opaque {}
+
+class ObjCObject extends ffi.Opaque {}
+
 class NSObject extends _ObjCWrapper {
   NSObject._(ffi.Pointer<ObjCObject> id, MethodTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSObject castFrom<T extends _ObjCWrapper>(T other) {
     return NSObject._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_load;
   static void load(MethodTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_load ??= _registerName(_lib, "load");
-    _lib._objc_msgSend_0(_class!, _sel_load!);
+    _lib._objc_msgSend_0(_lib._class_NSObject1, _lib._sel_load1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initialize;
   static void initialize(MethodTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_initialize ??= _registerName(_lib, "initialize");
-    _lib._objc_msgSend_0(_class!, _sel_initialize!);
+    _lib._objc_msgSend_0(_lib._class_NSObject1, _lib._sel_initialize1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_init;
   NSObject init() {
-    _sel_init ??= _registerName(_lib, "init");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_init!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_init1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSObject new1(MethodTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_new1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_allocWithZone;
   static NSObject allocWithZone(
       MethodTestObjCLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_allocWithZone ??= _registerName(_lib, "allocWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_allocWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_allocWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSObject alloc(MethodTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_alloc1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_dealloc;
   void dealloc() {
-    _sel_dealloc ??= _registerName(_lib, "dealloc");
-    _lib._objc_msgSend_0(_id, _sel_dealloc!);
+    _lib._objc_msgSend_0(_id, _lib._sel_dealloc1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_finalize;
   void finalize() {
-    _sel_finalize ??= _registerName(_lib, "finalize");
-    _lib._objc_msgSend_0(_id, _sel_finalize!);
+    _lib._objc_msgSend_0(_id, _lib._sel_finalize1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_copy;
   NSObject copy() {
-    _sel_copy ??= _registerName(_lib, "copy");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_copy!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_copy1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_mutableCopy;
   NSObject mutableCopy() {
-    _sel_mutableCopy ??= _registerName(_lib, "mutableCopy");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_mutableCopy!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_mutableCopy1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_copyWithZone;
   static NSObject copyWithZone(
       MethodTestObjCLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_copyWithZone ??= _registerName(_lib, "copyWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_copyWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_copyWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_mutableCopyWithZone;
   static NSObject mutableCopyWithZone(
       MethodTestObjCLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_mutableCopyWithZone ??= _registerName(_lib, "mutableCopyWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_mutableCopyWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_mutableCopyWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instancesRespondToSelector;
   static bool instancesRespondToSelector(
       MethodTestObjCLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instancesRespondToSelector ??=
-        _registerName(_lib, "instancesRespondToSelector:");
-    return _lib._objc_msgSend_3(
-        _class!, _sel_instancesRespondToSelector!, aSelector);
+    return _lib._objc_msgSend_3(_lib._class_NSObject1,
+        _lib._sel_instancesRespondToSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_conformsToProtocol;
   static bool conformsToProtocol(
       MethodTestObjCLibrary _lib, NSObject protocol) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_conformsToProtocol ??= _registerName(_lib, "conformsToProtocol:");
     return _lib._objc_msgSend_4(
-        _class!, _sel_conformsToProtocol!, protocol._id);
+        _lib._class_NSObject1, _lib._sel_conformsToProtocol_1, protocol._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_methodForSelector;
   IMP methodForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_methodForSelector ??= _registerName(_lib, "methodForSelector:");
-    return _lib._objc_msgSend_5(_id, _sel_methodForSelector!, aSelector);
+    return _lib._objc_msgSend_5(_id, _lib._sel_methodForSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instanceMethodForSelector;
   static IMP instanceMethodForSelector(
       MethodTestObjCLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instanceMethodForSelector ??=
-        _registerName(_lib, "instanceMethodForSelector:");
-    return _lib._objc_msgSend_5(
-        _class!, _sel_instanceMethodForSelector!, aSelector);
+    return _lib._objc_msgSend_5(_lib._class_NSObject1,
+        _lib._sel_instanceMethodForSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_doesNotRecognizeSelector;
   void doesNotRecognizeSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_doesNotRecognizeSelector ??=
-        _registerName(_lib, "doesNotRecognizeSelector:");
-    _lib._objc_msgSend_6(_id, _sel_doesNotRecognizeSelector!, aSelector);
+    _lib._objc_msgSend_6(_id, _lib._sel_doesNotRecognizeSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_forwardingTargetForSelector;
   NSObject forwardingTargetForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_forwardingTargetForSelector ??=
-        _registerName(_lib, "forwardingTargetForSelector:");
-    final _ret =
-        _lib._objc_msgSend_7(_id, _sel_forwardingTargetForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_7(
+        _id, _lib._sel_forwardingTargetForSelector_1, aSelector);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_forwardInvocation;
   void forwardInvocation(NSObject anInvocation) {
-    _sel_forwardInvocation ??= _registerName(_lib, "forwardInvocation:");
-    _lib._objc_msgSend_8(_id, _sel_forwardInvocation!, anInvocation._id);
+    _lib._objc_msgSend_8(_id, _lib._sel_forwardInvocation_1, anInvocation._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_methodSignatureForSelector;
   NSMethodSignature methodSignatureForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_methodSignatureForSelector ??=
-        _registerName(_lib, "methodSignatureForSelector:");
-    final _ret =
-        _lib._objc_msgSend_9(_id, _sel_methodSignatureForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_9(
+        _id, _lib._sel_methodSignatureForSelector_1, aSelector);
     return NSMethodSignature._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instanceMethodSignatureForSelector;
   static NSMethodSignature instanceMethodSignatureForSelector(
       MethodTestObjCLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instanceMethodSignatureForSelector ??=
-        _registerName(_lib, "instanceMethodSignatureForSelector:");
-    final _ret = _lib._objc_msgSend_9(
-        _class!, _sel_instanceMethodSignatureForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_9(_lib._class_NSObject1,
+        _lib._sel_instanceMethodSignatureForSelector_1, aSelector);
     return NSMethodSignature._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_allowsWeakReference;
   bool allowsWeakReference() {
-    _sel_allowsWeakReference ??= _registerName(_lib, "allowsWeakReference");
-    return _lib._objc_msgSend_10(_id, _sel_allowsWeakReference!);
+    return _lib._objc_msgSend_10(_id, _lib._sel_allowsWeakReference1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_retainWeakReference;
   bool retainWeakReference() {
-    _sel_retainWeakReference ??= _registerName(_lib, "retainWeakReference");
-    return _lib._objc_msgSend_10(_id, _sel_retainWeakReference!);
+    return _lib._objc_msgSend_10(_id, _lib._sel_retainWeakReference1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_isSubclassOfClass;
   static bool isSubclassOfClass(MethodTestObjCLibrary _lib, NSObject aClass) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_isSubclassOfClass ??= _registerName(_lib, "isSubclassOfClass:");
-    return _lib._objc_msgSend_4(_class!, _sel_isSubclassOfClass!, aClass._id);
+    return _lib._objc_msgSend_4(
+        _lib._class_NSObject1, _lib._sel_isSubclassOfClass_1, aClass._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_resolveClassMethod;
   static bool resolveClassMethod(
       MethodTestObjCLibrary _lib, ffi.Pointer<ObjCSel> sel) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_resolveClassMethod ??= _registerName(_lib, "resolveClassMethod:");
-    return _lib._objc_msgSend_3(_class!, _sel_resolveClassMethod!, sel);
+    return _lib._objc_msgSend_3(
+        _lib._class_NSObject1, _lib._sel_resolveClassMethod_1, sel);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_resolveInstanceMethod;
   static bool resolveInstanceMethod(
       MethodTestObjCLibrary _lib, ffi.Pointer<ObjCSel> sel) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_resolveInstanceMethod ??=
-        _registerName(_lib, "resolveInstanceMethod:");
-    return _lib._objc_msgSend_3(_class!, _sel_resolveInstanceMethod!, sel);
+    return _lib._objc_msgSend_3(
+        _lib._class_NSObject1, _lib._sel_resolveInstanceMethod_1, sel);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_hash;
   static int hash(MethodTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_hash ??= _registerName(_lib, "hash");
-    return _lib._objc_msgSend_11(_class!, _sel_hash!);
+    return _lib._objc_msgSend_11(_lib._class_NSObject1, _lib._sel_hash1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_superclass;
   static NSObject superclass(MethodTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_superclass ??= _registerName(_lib, "superclass");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_superclass!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_superclass1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_class1;
   static NSObject class1(MethodTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_class1 ??= _registerName(_lib, "class");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_class1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_class1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_description;
   static NSString description(MethodTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_description ??= _registerName(_lib, "description");
-    final _ret = _lib._objc_msgSend_14(_class!, _sel_description!);
+    final _ret =
+        _lib._objc_msgSend_14(_lib._class_NSObject1, _lib._sel_description1);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_debugDescription;
   static NSString debugDescription(MethodTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_debugDescription ??= _registerName(_lib, "debugDescription");
-    final _ret = _lib._objc_msgSend_14(_class!, _sel_debugDescription!);
+    final _ret = _lib._objc_msgSend_14(
+        _lib._class_NSObject1, _lib._sel_debugDescription1);
     return NSString._(_ret, _lib);
   }
 }
 
 typedef instancetype = ffi.Pointer<ObjCObject>;
 
-class ObjCObject extends ffi.Opaque {}
-
 class _NSZone extends ffi.Opaque {}
 
-class ObjCSel extends ffi.Opaque {}
-
 typedef IMP = ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>;
 
 class NSMethodSignature extends _ObjCWrapper {
   NSMethodSignature._(ffi.Pointer<ObjCObject> id, MethodTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSMethodSignature castFrom<T extends _ObjCWrapper>(T other) {
     return NSMethodSignature._(other._id, other._lib);
   }
@@ -986,8 +952,6 @@
   NSString._(ffi.Pointer<ObjCObject> id, MethodTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSString castFrom<T extends _ObjCWrapper>(T other) {
     return NSString._(other._id, other._lib);
   }
@@ -1002,21 +966,15 @@
   @override
   String toString() => UTF8String().cast<pkg_ffi.Utf8>().toDartString();
 
-  static ffi.Pointer<ObjCSel>? _sel_stringWithCString_encoding;
   static NSString stringWithCString_encoding(
       MethodTestObjCLibrary _lib, ffi.Pointer<pkg_ffi.Char> cString, int enc) {
-    _class ??= _getClass(_lib, "NSString");
-    _sel_stringWithCString_encoding ??=
-        _registerName(_lib, "stringWithCString:encoding:");
-    final _ret = _lib._objc_msgSend_12(
-        _class!, _sel_stringWithCString_encoding!, cString, enc);
+    final _ret = _lib._objc_msgSend_12(_lib._class_NSString1,
+        _lib._sel_stringWithCString_encoding_1, cString, enc);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_UTF8String;
   ffi.Pointer<pkg_ffi.Char> UTF8String() {
-    _sel_UTF8String ??= _registerName(_lib, "UTF8String");
-    return _lib._objc_msgSend_13(_id, _sel_UTF8String!);
+    return _lib._objc_msgSend_13(_id, _lib._sel_UTF8String1);
   }
 }
 
diff --git a/pkgs/ffigen/test/native_objc_test/native_objc_test_bindings.dart b/pkgs/ffigen/test/native_objc_test/native_objc_test_bindings.dart
index 9ffa2a8..5b9e98f 100644
--- a/pkgs/ffigen/test/native_objc_test/native_objc_test_bindings.dart
+++ b/pkgs/ffigen/test/native_objc_test/native_objc_test_bindings.dart
@@ -404,6 +404,13 @@
   set NSParseErrorException(NSExceptionName value) =>
       _NSParseErrorException.value = value;
 
+  ffi.Pointer<ObjCSel> _registerName1(String name) {
+    final cstr = name.toNativeUtf8();
+    final sel = _sel_registerName(cstr.cast());
+    pkg_ffi.calloc.free(cstr);
+    return sel;
+  }
+
   ffi.Pointer<ObjCSel> _sel_registerName(
     ffi.Pointer<pkg_ffi.Char> str,
   ) {
@@ -419,6 +426,13 @@
   late final __sel_registerName = __sel_registerNamePtr
       .asFunction<ffi.Pointer<ObjCSel> Function(ffi.Pointer<pkg_ffi.Char>)>();
 
+  ffi.Pointer<ObjCObject> _getClass1(String name) {
+    final cstr = name.toNativeUtf8();
+    final clazz = _objc_getClass(cstr.cast());
+    pkg_ffi.calloc.free(cstr);
+    return clazz;
+  }
+
   ffi.Pointer<ObjCObject> _objc_getClass(
     ffi.Pointer<pkg_ffi.Char> str,
   ) {
@@ -434,6 +448,9 @@
   late final __objc_getClass = __objc_getClassPtr.asFunction<
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<pkg_ffi.Char>)>();
 
+  late final ffi.Pointer<ObjCObject> _class_Foo1 = _getClass1("Foo");
+  late final ffi.Pointer<ObjCObject> _class_NSObject1 = _getClass1("NSObject");
+  late final ffi.Pointer<ObjCSel> _sel_load1 = _registerName1("load");
   void _objc_msgSend_0(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -451,6 +468,9 @@
   late final __objc_msgSend_0 = __objc_msgSend_0Ptr.asFunction<
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initialize1 =
+      _registerName1("initialize");
+  late final ffi.Pointer<ObjCSel> _sel_init1 = _registerName1("init");
   instancetype _objc_msgSend_1(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -468,6 +488,9 @@
   late final __objc_msgSend_1 = __objc_msgSend_1Ptr.asFunction<
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_new1 = _registerName1("new");
+  late final ffi.Pointer<ObjCSel> _sel_allocWithZone_1 =
+      _registerName1("allocWithZone:");
   instancetype _objc_msgSend_2(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -488,6 +511,18 @@
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<_NSZone>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_alloc1 = _registerName1("alloc");
+  late final ffi.Pointer<ObjCSel> _sel_dealloc1 = _registerName1("dealloc");
+  late final ffi.Pointer<ObjCSel> _sel_finalize1 = _registerName1("finalize");
+  late final ffi.Pointer<ObjCSel> _sel_copy1 = _registerName1("copy");
+  late final ffi.Pointer<ObjCSel> _sel_mutableCopy1 =
+      _registerName1("mutableCopy");
+  late final ffi.Pointer<ObjCSel> _sel_copyWithZone_1 =
+      _registerName1("copyWithZone:");
+  late final ffi.Pointer<ObjCSel> _sel_mutableCopyWithZone_1 =
+      _registerName1("mutableCopyWithZone:");
+  late final ffi.Pointer<ObjCSel> _sel_instancesRespondToSelector_1 =
+      _registerName1("instancesRespondToSelector:");
   bool _objc_msgSend_3(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -509,6 +544,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_conformsToProtocol_1 =
+      _registerName1("conformsToProtocol:");
   bool _objc_msgSend_4(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -530,6 +567,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_methodForSelector_1 =
+      _registerName1("methodForSelector:");
   IMP _objc_msgSend_5(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -550,6 +589,10 @@
       IMP Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_instanceMethodForSelector_1 =
+      _registerName1("instanceMethodForSelector:");
+  late final ffi.Pointer<ObjCSel> _sel_doesNotRecognizeSelector_1 =
+      _registerName1("doesNotRecognizeSelector:");
   void _objc_msgSend_6(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -570,6 +613,8 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_forwardingTargetForSelector_1 =
+      _registerName1("forwardingTargetForSelector:");
   ffi.Pointer<ObjCObject> _objc_msgSend_7(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -590,6 +635,8 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_forwardInvocation_1 =
+      _registerName1("forwardInvocation:");
   void _objc_msgSend_8(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -610,6 +657,10 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCObject> _class_NSMethodSignature1 =
+      _getClass1("NSMethodSignature");
+  late final ffi.Pointer<ObjCSel> _sel_methodSignatureForSelector_1 =
+      _registerName1("methodSignatureForSelector:");
   ffi.Pointer<ObjCObject> _objc_msgSend_9(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -630,6 +681,10 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_instanceMethodSignatureForSelector_1 =
+      _registerName1("instanceMethodSignatureForSelector:");
+  late final ffi.Pointer<ObjCSel> _sel_allowsWeakReference1 =
+      _registerName1("allowsWeakReference");
   bool _objc_msgSend_10(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -648,6 +703,15 @@
   late final __objc_msgSend_10 = __objc_msgSend_10Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_retainWeakReference1 =
+      _registerName1("retainWeakReference");
+  late final ffi.Pointer<ObjCSel> _sel_isSubclassOfClass_1 =
+      _registerName1("isSubclassOfClass:");
+  late final ffi.Pointer<ObjCSel> _sel_resolveClassMethod_1 =
+      _registerName1("resolveClassMethod:");
+  late final ffi.Pointer<ObjCSel> _sel_resolveInstanceMethod_1 =
+      _registerName1("resolveInstanceMethod:");
+  late final ffi.Pointer<ObjCSel> _sel_hash1 = _registerName1("hash");
   int _objc_msgSend_11(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -665,6 +729,13 @@
   late final __objc_msgSend_11 = __objc_msgSend_11Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_superclass1 =
+      _registerName1("superclass");
+  late final ffi.Pointer<ObjCSel> _sel_class1 = _registerName1("class");
+  late final ffi.Pointer<ObjCObject> _class_NSString1 = _getClass1("NSString");
+  late final ffi.Pointer<ObjCSel> _sel_length1 = _registerName1("length");
+  late final ffi.Pointer<ObjCSel> _sel_characterAtIndex_1 =
+      _registerName1("characterAtIndex:");
   int _objc_msgSend_12(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -684,6 +755,8 @@
   late final __objc_msgSend_12 = __objc_msgSend_12Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithCoder_1 =
+      _registerName1("initWithCoder:");
   instancetype _objc_msgSend_13(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -704,6 +777,8 @@
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_stringWithCString_encoding_1 =
+      _registerName1("stringWithCString:encoding:");
   ffi.Pointer<ObjCObject> _objc_msgSend_14(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -729,6 +804,8 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<pkg_ffi.Char>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_UTF8String1 =
+      _registerName1("UTF8String");
   ffi.Pointer<pkg_ffi.Char> _objc_msgSend_15(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -747,6 +824,8 @@
       ffi.Pointer<pkg_ffi.Char> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_description1 =
+      _registerName1("description");
   ffi.Pointer<ObjCObject> _objc_msgSend_16(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -765,6 +844,9 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_debugDescription1 =
+      _registerName1("debugDescription");
+  late final ffi.Pointer<ObjCSel> _sel_intVal1 = _registerName1("intVal");
   int _objc_msgSend_17(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -782,6 +864,8 @@
   late final __objc_msgSend_17 = __objc_msgSend_17Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_setIntVal_1 =
+      _registerName1("setIntVal:");
   void _objc_msgSend_18(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -801,6 +885,7 @@
   late final __objc_msgSend_18 = __objc_msgSend_18Ptr.asFunction<
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_makeFoo_1 = _registerName1("makeFoo:");
   ffi.Pointer<ObjCObject> _objc_msgSend_19(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -821,6 +906,8 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, double)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_multiply_withOtherFoo_1 =
+      _registerName1("multiply:withOtherFoo:");
   int _objc_msgSend_20(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -843,6 +930,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_setDoubleVal_1 =
+      _registerName1("setDoubleVal:");
   void _objc_msgSend_21(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1054,20 +1143,6 @@
 typedef NSStringEncodingDetectionOptionsKey = ffi.Pointer<ObjCObject>;
 typedef NSExceptionName = ffi.Pointer<ObjCObject>;
 
-ffi.Pointer<ObjCSel> _registerName(NativeObjCLibrary _lib, String name) {
-  final cstr = name.toNativeUtf8();
-  final sel = _lib._sel_registerName(cstr.cast());
-  pkg_ffi.calloc.free(cstr);
-  return sel;
-}
-
-ffi.Pointer<ObjCObject> _getClass(NativeObjCLibrary _lib, String name) {
-  final cstr = name.toNativeUtf8();
-  final clazz = _lib._objc_getClass(cstr.cast());
-  pkg_ffi.calloc.free(cstr);
-  return clazz;
-}
-
 class _ObjCWrapper {
   final ffi.Pointer<ObjCObject> _id;
   final NativeObjCLibrary _lib;
@@ -1077,311 +1152,213 @@
 class Foo extends NSObject {
   Foo._(ffi.Pointer<ObjCObject> id, NativeObjCLibrary lib) : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static Foo castFrom<T extends _ObjCWrapper>(T other) {
     return Foo._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_intVal;
   int get intVal {
-    _sel_intVal ??= _registerName(_lib, "intVal");
-    return _lib._objc_msgSend_17(_id, _sel_intVal!);
+    return _lib._objc_msgSend_17(_id, _lib._sel_intVal1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_intVal1;
   set intVal(int value) {
-    _sel_intVal1 ??= _registerName(_lib, "setIntVal:");
-    _lib._objc_msgSend_18(_id, _sel_intVal1!, value);
+    _lib._objc_msgSend_18(_id, _lib._sel_setIntVal_1, value);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_makeFoo;
   static Foo makeFoo(NativeObjCLibrary _lib, double x) {
-    _class ??= _getClass(_lib, "Foo");
-    _sel_makeFoo ??= _registerName(_lib, "makeFoo:");
-    final _ret = _lib._objc_msgSend_19(_class!, _sel_makeFoo!, x);
+    final _ret =
+        _lib._objc_msgSend_19(_lib._class_Foo1, _lib._sel_makeFoo_1, x);
     return Foo._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_multiply_withOtherFoo;
   int multiply_withOtherFoo(bool useIntVals, NSObject other) {
-    _sel_multiply_withOtherFoo ??=
-        _registerName(_lib, "multiply:withOtherFoo:");
     return _lib._objc_msgSend_20(
-        _id, _sel_multiply_withOtherFoo!, useIntVals, other._id);
+        _id, _lib._sel_multiply_withOtherFoo_1, useIntVals, other._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_setDoubleVal;
   void setDoubleVal(double x) {
-    _sel_setDoubleVal ??= _registerName(_lib, "setDoubleVal:");
-    _lib._objc_msgSend_21(_id, _sel_setDoubleVal!, x);
+    _lib._objc_msgSend_21(_id, _lib._sel_setDoubleVal_1, x);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static Foo new1(NativeObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "Foo");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_Foo1, _lib._sel_new1);
     return Foo._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static Foo alloc(NativeObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "Foo");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_Foo1, _lib._sel_alloc1);
     return Foo._(_ret, _lib);
   }
 }
 
+class ObjCSel extends ffi.Opaque {}
+
 class NSObject extends _ObjCWrapper {
   NSObject._(ffi.Pointer<ObjCObject> id, NativeObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSObject castFrom<T extends _ObjCWrapper>(T other) {
     return NSObject._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_load;
   static void load(NativeObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_load ??= _registerName(_lib, "load");
-    _lib._objc_msgSend_0(_class!, _sel_load!);
+    _lib._objc_msgSend_0(_lib._class_NSObject1, _lib._sel_load1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initialize;
   static void initialize(NativeObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_initialize ??= _registerName(_lib, "initialize");
-    _lib._objc_msgSend_0(_class!, _sel_initialize!);
+    _lib._objc_msgSend_0(_lib._class_NSObject1, _lib._sel_initialize1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_init;
   NSObject init() {
-    _sel_init ??= _registerName(_lib, "init");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_init!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_init1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSObject new1(NativeObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_new1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_allocWithZone;
   static NSObject allocWithZone(
       NativeObjCLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_allocWithZone ??= _registerName(_lib, "allocWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_allocWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_allocWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSObject alloc(NativeObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_alloc1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_dealloc;
   void dealloc() {
-    _sel_dealloc ??= _registerName(_lib, "dealloc");
-    _lib._objc_msgSend_0(_id, _sel_dealloc!);
+    _lib._objc_msgSend_0(_id, _lib._sel_dealloc1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_finalize;
   void finalize() {
-    _sel_finalize ??= _registerName(_lib, "finalize");
-    _lib._objc_msgSend_0(_id, _sel_finalize!);
+    _lib._objc_msgSend_0(_id, _lib._sel_finalize1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_copy;
   NSObject copy() {
-    _sel_copy ??= _registerName(_lib, "copy");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_copy!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_copy1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_mutableCopy;
   NSObject mutableCopy() {
-    _sel_mutableCopy ??= _registerName(_lib, "mutableCopy");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_mutableCopy!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_mutableCopy1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_copyWithZone;
   static NSObject copyWithZone(
       NativeObjCLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_copyWithZone ??= _registerName(_lib, "copyWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_copyWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_copyWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_mutableCopyWithZone;
   static NSObject mutableCopyWithZone(
       NativeObjCLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_mutableCopyWithZone ??= _registerName(_lib, "mutableCopyWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_mutableCopyWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_mutableCopyWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instancesRespondToSelector;
   static bool instancesRespondToSelector(
       NativeObjCLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instancesRespondToSelector ??=
-        _registerName(_lib, "instancesRespondToSelector:");
-    return _lib._objc_msgSend_3(
-        _class!, _sel_instancesRespondToSelector!, aSelector);
+    return _lib._objc_msgSend_3(_lib._class_NSObject1,
+        _lib._sel_instancesRespondToSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_conformsToProtocol;
   static bool conformsToProtocol(NativeObjCLibrary _lib, NSObject protocol) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_conformsToProtocol ??= _registerName(_lib, "conformsToProtocol:");
     return _lib._objc_msgSend_4(
-        _class!, _sel_conformsToProtocol!, protocol._id);
+        _lib._class_NSObject1, _lib._sel_conformsToProtocol_1, protocol._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_methodForSelector;
   IMP methodForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_methodForSelector ??= _registerName(_lib, "methodForSelector:");
-    return _lib._objc_msgSend_5(_id, _sel_methodForSelector!, aSelector);
+    return _lib._objc_msgSend_5(_id, _lib._sel_methodForSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instanceMethodForSelector;
   static IMP instanceMethodForSelector(
       NativeObjCLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instanceMethodForSelector ??=
-        _registerName(_lib, "instanceMethodForSelector:");
-    return _lib._objc_msgSend_5(
-        _class!, _sel_instanceMethodForSelector!, aSelector);
+    return _lib._objc_msgSend_5(_lib._class_NSObject1,
+        _lib._sel_instanceMethodForSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_doesNotRecognizeSelector;
   void doesNotRecognizeSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_doesNotRecognizeSelector ??=
-        _registerName(_lib, "doesNotRecognizeSelector:");
-    _lib._objc_msgSend_6(_id, _sel_doesNotRecognizeSelector!, aSelector);
+    _lib._objc_msgSend_6(_id, _lib._sel_doesNotRecognizeSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_forwardingTargetForSelector;
   NSObject forwardingTargetForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_forwardingTargetForSelector ??=
-        _registerName(_lib, "forwardingTargetForSelector:");
-    final _ret =
-        _lib._objc_msgSend_7(_id, _sel_forwardingTargetForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_7(
+        _id, _lib._sel_forwardingTargetForSelector_1, aSelector);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_forwardInvocation;
   void forwardInvocation(NSObject anInvocation) {
-    _sel_forwardInvocation ??= _registerName(_lib, "forwardInvocation:");
-    _lib._objc_msgSend_8(_id, _sel_forwardInvocation!, anInvocation._id);
+    _lib._objc_msgSend_8(_id, _lib._sel_forwardInvocation_1, anInvocation._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_methodSignatureForSelector;
   NSMethodSignature methodSignatureForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_methodSignatureForSelector ??=
-        _registerName(_lib, "methodSignatureForSelector:");
-    final _ret =
-        _lib._objc_msgSend_9(_id, _sel_methodSignatureForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_9(
+        _id, _lib._sel_methodSignatureForSelector_1, aSelector);
     return NSMethodSignature._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instanceMethodSignatureForSelector;
   static NSMethodSignature instanceMethodSignatureForSelector(
       NativeObjCLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instanceMethodSignatureForSelector ??=
-        _registerName(_lib, "instanceMethodSignatureForSelector:");
-    final _ret = _lib._objc_msgSend_9(
-        _class!, _sel_instanceMethodSignatureForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_9(_lib._class_NSObject1,
+        _lib._sel_instanceMethodSignatureForSelector_1, aSelector);
     return NSMethodSignature._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_allowsWeakReference;
   bool allowsWeakReference() {
-    _sel_allowsWeakReference ??= _registerName(_lib, "allowsWeakReference");
-    return _lib._objc_msgSend_10(_id, _sel_allowsWeakReference!);
+    return _lib._objc_msgSend_10(_id, _lib._sel_allowsWeakReference1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_retainWeakReference;
   bool retainWeakReference() {
-    _sel_retainWeakReference ??= _registerName(_lib, "retainWeakReference");
-    return _lib._objc_msgSend_10(_id, _sel_retainWeakReference!);
+    return _lib._objc_msgSend_10(_id, _lib._sel_retainWeakReference1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_isSubclassOfClass;
   static bool isSubclassOfClass(NativeObjCLibrary _lib, NSObject aClass) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_isSubclassOfClass ??= _registerName(_lib, "isSubclassOfClass:");
-    return _lib._objc_msgSend_4(_class!, _sel_isSubclassOfClass!, aClass._id);
+    return _lib._objc_msgSend_4(
+        _lib._class_NSObject1, _lib._sel_isSubclassOfClass_1, aClass._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_resolveClassMethod;
   static bool resolveClassMethod(
       NativeObjCLibrary _lib, ffi.Pointer<ObjCSel> sel) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_resolveClassMethod ??= _registerName(_lib, "resolveClassMethod:");
-    return _lib._objc_msgSend_3(_class!, _sel_resolveClassMethod!, sel);
+    return _lib._objc_msgSend_3(
+        _lib._class_NSObject1, _lib._sel_resolveClassMethod_1, sel);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_resolveInstanceMethod;
   static bool resolveInstanceMethod(
       NativeObjCLibrary _lib, ffi.Pointer<ObjCSel> sel) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_resolveInstanceMethod ??=
-        _registerName(_lib, "resolveInstanceMethod:");
-    return _lib._objc_msgSend_3(_class!, _sel_resolveInstanceMethod!, sel);
+    return _lib._objc_msgSend_3(
+        _lib._class_NSObject1, _lib._sel_resolveInstanceMethod_1, sel);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_hash;
   static int hash(NativeObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_hash ??= _registerName(_lib, "hash");
-    return _lib._objc_msgSend_11(_class!, _sel_hash!);
+    return _lib._objc_msgSend_11(_lib._class_NSObject1, _lib._sel_hash1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_superclass;
   static NSObject superclass(NativeObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_superclass ??= _registerName(_lib, "superclass");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_superclass!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_superclass1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_class1;
   static NSObject class1(NativeObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_class1 ??= _registerName(_lib, "class");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_class1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_class1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_description;
   static NSString description(NativeObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_description ??= _registerName(_lib, "description");
-    final _ret = _lib._objc_msgSend_16(_class!, _sel_description!);
+    final _ret =
+        _lib._objc_msgSend_16(_lib._class_NSObject1, _lib._sel_description1);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_debugDescription;
   static NSString debugDescription(NativeObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_debugDescription ??= _registerName(_lib, "debugDescription");
-    final _ret = _lib._objc_msgSend_16(_class!, _sel_debugDescription!);
+    final _ret = _lib._objc_msgSend_16(
+        _lib._class_NSObject1, _lib._sel_debugDescription1);
     return NSString._(_ret, _lib);
   }
 }
@@ -1390,16 +1367,12 @@
 
 class _NSZone extends ffi.Opaque {}
 
-class ObjCSel extends ffi.Opaque {}
-
 typedef IMP = ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>;
 
 class NSMethodSignature extends _ObjCWrapper {
   NSMethodSignature._(ffi.Pointer<ObjCObject> id, NativeObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSMethodSignature castFrom<T extends _ObjCWrapper>(T other) {
     return NSMethodSignature._(other._id, other._lib);
   }
@@ -1409,8 +1382,6 @@
   NSString._(ffi.Pointer<ObjCObject> id, NativeObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSString castFrom<T extends _ObjCWrapper>(T other) {
     return NSString._(other._id, other._lib);
   }
@@ -1425,63 +1396,44 @@
   @override
   String toString() => UTF8String().cast<pkg_ffi.Utf8>().toDartString();
 
-  static ffi.Pointer<ObjCSel>? _sel_length;
   int get length {
-    _sel_length ??= _registerName(_lib, "length");
-    return _lib._objc_msgSend_11(_id, _sel_length!);
+    return _lib._objc_msgSend_11(_id, _lib._sel_length1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_characterAtIndex;
   int characterAtIndex(int index) {
-    _sel_characterAtIndex ??= _registerName(_lib, "characterAtIndex:");
-    return _lib._objc_msgSend_12(_id, _sel_characterAtIndex!, index);
+    return _lib._objc_msgSend_12(_id, _lib._sel_characterAtIndex_1, index);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_init;
   @override
   NSString init() {
-    _sel_init ??= _registerName(_lib, "init");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_init!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_init1);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithCoder;
   NSString initWithCoder(NSObject coder) {
-    _sel_initWithCoder ??= _registerName(_lib, "initWithCoder:");
-    final _ret = _lib._objc_msgSend_13(_id, _sel_initWithCoder!, coder._id);
+    final _ret =
+        _lib._objc_msgSend_13(_id, _lib._sel_initWithCoder_1, coder._id);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_stringWithCString_encoding;
   static NSString stringWithCString_encoding(
       NativeObjCLibrary _lib, ffi.Pointer<pkg_ffi.Char> cString, int enc) {
-    _class ??= _getClass(_lib, "NSString");
-    _sel_stringWithCString_encoding ??=
-        _registerName(_lib, "stringWithCString:encoding:");
-    final _ret = _lib._objc_msgSend_14(
-        _class!, _sel_stringWithCString_encoding!, cString, enc);
+    final _ret = _lib._objc_msgSend_14(_lib._class_NSString1,
+        _lib._sel_stringWithCString_encoding_1, cString, enc);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_UTF8String;
   ffi.Pointer<pkg_ffi.Char> UTF8String() {
-    _sel_UTF8String ??= _registerName(_lib, "UTF8String");
-    return _lib._objc_msgSend_15(_id, _sel_UTF8String!);
+    return _lib._objc_msgSend_15(_id, _lib._sel_UTF8String1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSString new1(NativeObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSString");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSString1, _lib._sel_new1);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSString alloc(NativeObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSString");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSString1, _lib._sel_alloc1);
     return NSString._(_ret, _lib);
   }
 }
diff --git a/pkgs/ffigen/test/native_objc_test/property_bindings.dart b/pkgs/ffigen/test/native_objc_test/property_bindings.dart
index 9a18e7d..f836774 100644
--- a/pkgs/ffigen/test/native_objc_test/property_bindings.dart
+++ b/pkgs/ffigen/test/native_objc_test/property_bindings.dart
@@ -107,6 +107,13 @@
   set kCFAllocatorUseContext(CFAllocatorRef value) =>
       _kCFAllocatorUseContext.value = value;
 
+  ffi.Pointer<ObjCSel> _registerName1(String name) {
+    final cstr = name.toNativeUtf8();
+    final sel = _sel_registerName(cstr.cast());
+    pkg_ffi.calloc.free(cstr);
+    return sel;
+  }
+
   ffi.Pointer<ObjCSel> _sel_registerName(
     ffi.Pointer<pkg_ffi.Char> str,
   ) {
@@ -122,6 +129,13 @@
   late final __sel_registerName = __sel_registerNamePtr
       .asFunction<ffi.Pointer<ObjCSel> Function(ffi.Pointer<pkg_ffi.Char>)>();
 
+  ffi.Pointer<ObjCObject> _getClass1(String name) {
+    final cstr = name.toNativeUtf8();
+    final clazz = _objc_getClass(cstr.cast());
+    pkg_ffi.calloc.free(cstr);
+    return clazz;
+  }
+
   ffi.Pointer<ObjCObject> _objc_getClass(
     ffi.Pointer<pkg_ffi.Char> str,
   ) {
@@ -137,6 +151,10 @@
   late final __objc_getClass = __objc_getClassPtr.asFunction<
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<pkg_ffi.Char>)>();
 
+  late final ffi.Pointer<ObjCObject> _class_PropertyInterface1 =
+      _getClass1("PropertyInterface");
+  late final ffi.Pointer<ObjCObject> _class_NSObject1 = _getClass1("NSObject");
+  late final ffi.Pointer<ObjCSel> _sel_load1 = _registerName1("load");
   void _objc_msgSend_0(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -154,6 +172,9 @@
   late final __objc_msgSend_0 = __objc_msgSend_0Ptr.asFunction<
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initialize1 =
+      _registerName1("initialize");
+  late final ffi.Pointer<ObjCSel> _sel_init1 = _registerName1("init");
   instancetype _objc_msgSend_1(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -171,6 +192,9 @@
   late final __objc_msgSend_1 = __objc_msgSend_1Ptr.asFunction<
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_new1 = _registerName1("new");
+  late final ffi.Pointer<ObjCSel> _sel_allocWithZone_1 =
+      _registerName1("allocWithZone:");
   instancetype _objc_msgSend_2(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -191,6 +215,18 @@
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<_NSZone>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_alloc1 = _registerName1("alloc");
+  late final ffi.Pointer<ObjCSel> _sel_dealloc1 = _registerName1("dealloc");
+  late final ffi.Pointer<ObjCSel> _sel_finalize1 = _registerName1("finalize");
+  late final ffi.Pointer<ObjCSel> _sel_copy1 = _registerName1("copy");
+  late final ffi.Pointer<ObjCSel> _sel_mutableCopy1 =
+      _registerName1("mutableCopy");
+  late final ffi.Pointer<ObjCSel> _sel_copyWithZone_1 =
+      _registerName1("copyWithZone:");
+  late final ffi.Pointer<ObjCSel> _sel_mutableCopyWithZone_1 =
+      _registerName1("mutableCopyWithZone:");
+  late final ffi.Pointer<ObjCSel> _sel_instancesRespondToSelector_1 =
+      _registerName1("instancesRespondToSelector:");
   bool _objc_msgSend_3(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -212,6 +248,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_conformsToProtocol_1 =
+      _registerName1("conformsToProtocol:");
   bool _objc_msgSend_4(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -233,6 +271,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_methodForSelector_1 =
+      _registerName1("methodForSelector:");
   IMP _objc_msgSend_5(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -253,6 +293,10 @@
       IMP Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_instanceMethodForSelector_1 =
+      _registerName1("instanceMethodForSelector:");
+  late final ffi.Pointer<ObjCSel> _sel_doesNotRecognizeSelector_1 =
+      _registerName1("doesNotRecognizeSelector:");
   void _objc_msgSend_6(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -273,6 +317,8 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_forwardingTargetForSelector_1 =
+      _registerName1("forwardingTargetForSelector:");
   ffi.Pointer<ObjCObject> _objc_msgSend_7(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -293,6 +339,8 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_forwardInvocation_1 =
+      _registerName1("forwardInvocation:");
   void _objc_msgSend_8(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -313,6 +361,10 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCObject> _class_NSMethodSignature1 =
+      _getClass1("NSMethodSignature");
+  late final ffi.Pointer<ObjCSel> _sel_methodSignatureForSelector_1 =
+      _registerName1("methodSignatureForSelector:");
   ffi.Pointer<ObjCObject> _objc_msgSend_9(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -333,6 +385,10 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_instanceMethodSignatureForSelector_1 =
+      _registerName1("instanceMethodSignatureForSelector:");
+  late final ffi.Pointer<ObjCSel> _sel_allowsWeakReference1 =
+      _registerName1("allowsWeakReference");
   bool _objc_msgSend_10(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -351,6 +407,15 @@
   late final __objc_msgSend_10 = __objc_msgSend_10Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_retainWeakReference1 =
+      _registerName1("retainWeakReference");
+  late final ffi.Pointer<ObjCSel> _sel_isSubclassOfClass_1 =
+      _registerName1("isSubclassOfClass:");
+  late final ffi.Pointer<ObjCSel> _sel_resolveClassMethod_1 =
+      _registerName1("resolveClassMethod:");
+  late final ffi.Pointer<ObjCSel> _sel_resolveInstanceMethod_1 =
+      _registerName1("resolveInstanceMethod:");
+  late final ffi.Pointer<ObjCSel> _sel_hash1 = _registerName1("hash");
   int _objc_msgSend_11(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -368,6 +433,12 @@
   late final __objc_msgSend_11 = __objc_msgSend_11Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_superclass1 =
+      _registerName1("superclass");
+  late final ffi.Pointer<ObjCSel> _sel_class1 = _registerName1("class");
+  late final ffi.Pointer<ObjCObject> _class_NSString1 = _getClass1("NSString");
+  late final ffi.Pointer<ObjCSel> _sel_stringWithCString_encoding_1 =
+      _registerName1("stringWithCString:encoding:");
   ffi.Pointer<ObjCObject> _objc_msgSend_12(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -393,6 +464,8 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<pkg_ffi.Char>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_UTF8String1 =
+      _registerName1("UTF8String");
   ffi.Pointer<pkg_ffi.Char> _objc_msgSend_13(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -411,6 +484,8 @@
       ffi.Pointer<pkg_ffi.Char> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_description1 =
+      _registerName1("description");
   ffi.Pointer<ObjCObject> _objc_msgSend_14(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -429,6 +504,10 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_debugDescription1 =
+      _registerName1("debugDescription");
+  late final ffi.Pointer<ObjCSel> _sel_readOnlyProperty1 =
+      _registerName1("readOnlyProperty");
   int _objc_msgSend_15(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -446,6 +525,10 @@
   late final __objc_msgSend_15 = __objc_msgSend_15Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_readWriteProperty1 =
+      _registerName1("readWriteProperty");
+  late final ffi.Pointer<ObjCSel> _sel_setReadWriteProperty_1 =
+      _registerName1("setReadWriteProperty:");
   void _objc_msgSend_16(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -465,6 +548,12 @@
   late final __objc_msgSend_16 = __objc_msgSend_16Ptr.asFunction<
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_classReadOnlyProperty1 =
+      _registerName1("classReadOnlyProperty");
+  late final ffi.Pointer<ObjCSel> _sel_classReadWriteProperty1 =
+      _registerName1("classReadWriteProperty");
+  late final ffi.Pointer<ObjCSel> _sel_setClassReadWriteProperty_1 =
+      _registerName1("setClassReadWriteProperty:");
   late final ffi.Pointer<ffi.Int32> __classReadWriteProperty =
       _lookup<ffi.Int32>('_classReadWriteProperty');
 
@@ -570,20 +659,6 @@
     ffi.NativeFunction<
         CFIndex Function(CFIndex, CFOptionFlags, ffi.Pointer<ffi.Void>)>>;
 
-ffi.Pointer<ObjCSel> _registerName(PropertyTestObjCLibrary _lib, String name) {
-  final cstr = name.toNativeUtf8();
-  final sel = _lib._sel_registerName(cstr.cast());
-  pkg_ffi.calloc.free(cstr);
-  return sel;
-}
-
-ffi.Pointer<ObjCObject> _getClass(PropertyTestObjCLibrary _lib, String name) {
-  final cstr = name.toNativeUtf8();
-  final clazz = _lib._objc_getClass(cstr.cast());
-  pkg_ffi.calloc.free(cstr);
-  return clazz;
-}
-
 class _ObjCWrapper {
   final ffi.Pointer<ObjCObject> _id;
   final PropertyTestObjCLibrary _lib;
@@ -594,340 +669,237 @@
   PropertyInterface._(ffi.Pointer<ObjCObject> id, PropertyTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static PropertyInterface castFrom<T extends _ObjCWrapper>(T other) {
     return PropertyInterface._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_readOnlyProperty;
   int get readOnlyProperty {
-    _sel_readOnlyProperty ??= _registerName(_lib, "readOnlyProperty");
-    return _lib._objc_msgSend_15(_id, _sel_readOnlyProperty!);
+    return _lib._objc_msgSend_15(_id, _lib._sel_readOnlyProperty1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_readWriteProperty;
   int get readWriteProperty {
-    _sel_readWriteProperty ??= _registerName(_lib, "readWriteProperty");
-    return _lib._objc_msgSend_15(_id, _sel_readWriteProperty!);
+    return _lib._objc_msgSend_15(_id, _lib._sel_readWriteProperty1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_readWriteProperty1;
   set readWriteProperty(int value) {
-    _sel_readWriteProperty1 ??= _registerName(_lib, "setReadWriteProperty:");
-    _lib._objc_msgSend_16(_id, _sel_readWriteProperty1!, value);
+    _lib._objc_msgSend_16(_id, _lib._sel_setReadWriteProperty_1, value);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_classReadOnlyProperty;
   static int getClassReadOnlyProperty(PropertyTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "PropertyInterface");
-    _sel_classReadOnlyProperty ??= _registerName(_lib, "classReadOnlyProperty");
-    return _lib._objc_msgSend_15(_class!, _sel_classReadOnlyProperty!);
+    return _lib._objc_msgSend_15(
+        _lib._class_PropertyInterface1, _lib._sel_classReadOnlyProperty1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_classReadWriteProperty;
   static int getClassReadWriteProperty(PropertyTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "PropertyInterface");
-    _sel_classReadWriteProperty ??=
-        _registerName(_lib, "classReadWriteProperty");
-    return _lib._objc_msgSend_15(_class!, _sel_classReadWriteProperty!);
+    return _lib._objc_msgSend_15(
+        _lib._class_PropertyInterface1, _lib._sel_classReadWriteProperty1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_classReadWriteProperty1;
   static void setClassReadWriteProperty(
       PropertyTestObjCLibrary _lib, int value) {
-    _class ??= _getClass(_lib, "PropertyInterface");
-    _sel_classReadWriteProperty1 ??=
-        _registerName(_lib, "setClassReadWriteProperty:");
-    _lib._objc_msgSend_16(_class!, _sel_classReadWriteProperty1!, value);
+    _lib._objc_msgSend_16(_lib._class_PropertyInterface1,
+        _lib._sel_setClassReadWriteProperty_1, value);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static PropertyInterface new1(PropertyTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "PropertyInterface");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_PropertyInterface1, _lib._sel_new1);
     return PropertyInterface._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static PropertyInterface alloc(PropertyTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "PropertyInterface");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_PropertyInterface1, _lib._sel_alloc1);
     return PropertyInterface._(_ret, _lib);
   }
 }
 
+class ObjCSel extends ffi.Opaque {}
+
+class ObjCObject extends ffi.Opaque {}
+
 class NSObject extends _ObjCWrapper {
   NSObject._(ffi.Pointer<ObjCObject> id, PropertyTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSObject castFrom<T extends _ObjCWrapper>(T other) {
     return NSObject._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_load;
   static void load(PropertyTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_load ??= _registerName(_lib, "load");
-    _lib._objc_msgSend_0(_class!, _sel_load!);
+    _lib._objc_msgSend_0(_lib._class_NSObject1, _lib._sel_load1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initialize;
   static void initialize(PropertyTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_initialize ??= _registerName(_lib, "initialize");
-    _lib._objc_msgSend_0(_class!, _sel_initialize!);
+    _lib._objc_msgSend_0(_lib._class_NSObject1, _lib._sel_initialize1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_init;
   NSObject init() {
-    _sel_init ??= _registerName(_lib, "init");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_init!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_init1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSObject new1(PropertyTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_new1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_allocWithZone;
   static NSObject allocWithZone(
       PropertyTestObjCLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_allocWithZone ??= _registerName(_lib, "allocWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_allocWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_allocWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSObject alloc(PropertyTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_alloc1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_dealloc;
   void dealloc() {
-    _sel_dealloc ??= _registerName(_lib, "dealloc");
-    _lib._objc_msgSend_0(_id, _sel_dealloc!);
+    _lib._objc_msgSend_0(_id, _lib._sel_dealloc1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_finalize;
   void finalize() {
-    _sel_finalize ??= _registerName(_lib, "finalize");
-    _lib._objc_msgSend_0(_id, _sel_finalize!);
+    _lib._objc_msgSend_0(_id, _lib._sel_finalize1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_copy;
   NSObject copy() {
-    _sel_copy ??= _registerName(_lib, "copy");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_copy!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_copy1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_mutableCopy;
   NSObject mutableCopy() {
-    _sel_mutableCopy ??= _registerName(_lib, "mutableCopy");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_mutableCopy!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_mutableCopy1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_copyWithZone;
   static NSObject copyWithZone(
       PropertyTestObjCLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_copyWithZone ??= _registerName(_lib, "copyWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_copyWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_copyWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_mutableCopyWithZone;
   static NSObject mutableCopyWithZone(
       PropertyTestObjCLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_mutableCopyWithZone ??= _registerName(_lib, "mutableCopyWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_mutableCopyWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_mutableCopyWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instancesRespondToSelector;
   static bool instancesRespondToSelector(
       PropertyTestObjCLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instancesRespondToSelector ??=
-        _registerName(_lib, "instancesRespondToSelector:");
-    return _lib._objc_msgSend_3(
-        _class!, _sel_instancesRespondToSelector!, aSelector);
+    return _lib._objc_msgSend_3(_lib._class_NSObject1,
+        _lib._sel_instancesRespondToSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_conformsToProtocol;
   static bool conformsToProtocol(
       PropertyTestObjCLibrary _lib, NSObject protocol) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_conformsToProtocol ??= _registerName(_lib, "conformsToProtocol:");
     return _lib._objc_msgSend_4(
-        _class!, _sel_conformsToProtocol!, protocol._id);
+        _lib._class_NSObject1, _lib._sel_conformsToProtocol_1, protocol._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_methodForSelector;
   IMP methodForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_methodForSelector ??= _registerName(_lib, "methodForSelector:");
-    return _lib._objc_msgSend_5(_id, _sel_methodForSelector!, aSelector);
+    return _lib._objc_msgSend_5(_id, _lib._sel_methodForSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instanceMethodForSelector;
   static IMP instanceMethodForSelector(
       PropertyTestObjCLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instanceMethodForSelector ??=
-        _registerName(_lib, "instanceMethodForSelector:");
-    return _lib._objc_msgSend_5(
-        _class!, _sel_instanceMethodForSelector!, aSelector);
+    return _lib._objc_msgSend_5(_lib._class_NSObject1,
+        _lib._sel_instanceMethodForSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_doesNotRecognizeSelector;
   void doesNotRecognizeSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_doesNotRecognizeSelector ??=
-        _registerName(_lib, "doesNotRecognizeSelector:");
-    _lib._objc_msgSend_6(_id, _sel_doesNotRecognizeSelector!, aSelector);
+    _lib._objc_msgSend_6(_id, _lib._sel_doesNotRecognizeSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_forwardingTargetForSelector;
   NSObject forwardingTargetForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_forwardingTargetForSelector ??=
-        _registerName(_lib, "forwardingTargetForSelector:");
-    final _ret =
-        _lib._objc_msgSend_7(_id, _sel_forwardingTargetForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_7(
+        _id, _lib._sel_forwardingTargetForSelector_1, aSelector);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_forwardInvocation;
   void forwardInvocation(NSObject anInvocation) {
-    _sel_forwardInvocation ??= _registerName(_lib, "forwardInvocation:");
-    _lib._objc_msgSend_8(_id, _sel_forwardInvocation!, anInvocation._id);
+    _lib._objc_msgSend_8(_id, _lib._sel_forwardInvocation_1, anInvocation._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_methodSignatureForSelector;
   NSMethodSignature methodSignatureForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_methodSignatureForSelector ??=
-        _registerName(_lib, "methodSignatureForSelector:");
-    final _ret =
-        _lib._objc_msgSend_9(_id, _sel_methodSignatureForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_9(
+        _id, _lib._sel_methodSignatureForSelector_1, aSelector);
     return NSMethodSignature._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instanceMethodSignatureForSelector;
   static NSMethodSignature instanceMethodSignatureForSelector(
       PropertyTestObjCLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instanceMethodSignatureForSelector ??=
-        _registerName(_lib, "instanceMethodSignatureForSelector:");
-    final _ret = _lib._objc_msgSend_9(
-        _class!, _sel_instanceMethodSignatureForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_9(_lib._class_NSObject1,
+        _lib._sel_instanceMethodSignatureForSelector_1, aSelector);
     return NSMethodSignature._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_allowsWeakReference;
   bool allowsWeakReference() {
-    _sel_allowsWeakReference ??= _registerName(_lib, "allowsWeakReference");
-    return _lib._objc_msgSend_10(_id, _sel_allowsWeakReference!);
+    return _lib._objc_msgSend_10(_id, _lib._sel_allowsWeakReference1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_retainWeakReference;
   bool retainWeakReference() {
-    _sel_retainWeakReference ??= _registerName(_lib, "retainWeakReference");
-    return _lib._objc_msgSend_10(_id, _sel_retainWeakReference!);
+    return _lib._objc_msgSend_10(_id, _lib._sel_retainWeakReference1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_isSubclassOfClass;
   static bool isSubclassOfClass(PropertyTestObjCLibrary _lib, NSObject aClass) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_isSubclassOfClass ??= _registerName(_lib, "isSubclassOfClass:");
-    return _lib._objc_msgSend_4(_class!, _sel_isSubclassOfClass!, aClass._id);
+    return _lib._objc_msgSend_4(
+        _lib._class_NSObject1, _lib._sel_isSubclassOfClass_1, aClass._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_resolveClassMethod;
   static bool resolveClassMethod(
       PropertyTestObjCLibrary _lib, ffi.Pointer<ObjCSel> sel) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_resolveClassMethod ??= _registerName(_lib, "resolveClassMethod:");
-    return _lib._objc_msgSend_3(_class!, _sel_resolveClassMethod!, sel);
+    return _lib._objc_msgSend_3(
+        _lib._class_NSObject1, _lib._sel_resolveClassMethod_1, sel);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_resolveInstanceMethod;
   static bool resolveInstanceMethod(
       PropertyTestObjCLibrary _lib, ffi.Pointer<ObjCSel> sel) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_resolveInstanceMethod ??=
-        _registerName(_lib, "resolveInstanceMethod:");
-    return _lib._objc_msgSend_3(_class!, _sel_resolveInstanceMethod!, sel);
+    return _lib._objc_msgSend_3(
+        _lib._class_NSObject1, _lib._sel_resolveInstanceMethod_1, sel);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_hash;
   static int hash(PropertyTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_hash ??= _registerName(_lib, "hash");
-    return _lib._objc_msgSend_11(_class!, _sel_hash!);
+    return _lib._objc_msgSend_11(_lib._class_NSObject1, _lib._sel_hash1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_superclass;
   static NSObject superclass(PropertyTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_superclass ??= _registerName(_lib, "superclass");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_superclass!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_superclass1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_class1;
   static NSObject class1(PropertyTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_class1 ??= _registerName(_lib, "class");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_class1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_class1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_description;
   static NSString description(PropertyTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_description ??= _registerName(_lib, "description");
-    final _ret = _lib._objc_msgSend_14(_class!, _sel_description!);
+    final _ret =
+        _lib._objc_msgSend_14(_lib._class_NSObject1, _lib._sel_description1);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_debugDescription;
   static NSString debugDescription(PropertyTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_debugDescription ??= _registerName(_lib, "debugDescription");
-    final _ret = _lib._objc_msgSend_14(_class!, _sel_debugDescription!);
+    final _ret = _lib._objc_msgSend_14(
+        _lib._class_NSObject1, _lib._sel_debugDescription1);
     return NSString._(_ret, _lib);
   }
 }
 
 typedef instancetype = ffi.Pointer<ObjCObject>;
 
-class ObjCObject extends ffi.Opaque {}
-
 class _NSZone extends ffi.Opaque {}
 
-class ObjCSel extends ffi.Opaque {}
-
 typedef IMP = ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>;
 
 class NSMethodSignature extends _ObjCWrapper {
   NSMethodSignature._(ffi.Pointer<ObjCObject> id, PropertyTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSMethodSignature castFrom<T extends _ObjCWrapper>(T other) {
     return NSMethodSignature._(other._id, other._lib);
   }
@@ -939,8 +911,6 @@
   NSString._(ffi.Pointer<ObjCObject> id, PropertyTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSString castFrom<T extends _ObjCWrapper>(T other) {
     return NSString._(other._id, other._lib);
   }
@@ -955,21 +925,15 @@
   @override
   String toString() => UTF8String().cast<pkg_ffi.Utf8>().toDartString();
 
-  static ffi.Pointer<ObjCSel>? _sel_stringWithCString_encoding;
   static NSString stringWithCString_encoding(PropertyTestObjCLibrary _lib,
       ffi.Pointer<pkg_ffi.Char> cString, int enc) {
-    _class ??= _getClass(_lib, "NSString");
-    _sel_stringWithCString_encoding ??=
-        _registerName(_lib, "stringWithCString:encoding:");
-    final _ret = _lib._objc_msgSend_12(
-        _class!, _sel_stringWithCString_encoding!, cString, enc);
+    final _ret = _lib._objc_msgSend_12(_lib._class_NSString1,
+        _lib._sel_stringWithCString_encoding_1, cString, enc);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_UTF8String;
   ffi.Pointer<pkg_ffi.Char> UTF8String() {
-    _sel_UTF8String ??= _registerName(_lib, "UTF8String");
-    return _lib._objc_msgSend_13(_id, _sel_UTF8String!);
+    return _lib._objc_msgSend_13(_id, _lib._sel_UTF8String1);
   }
 }
 
diff --git a/pkgs/ffigen/test/native_objc_test/string_bindings.dart b/pkgs/ffigen/test/native_objc_test/string_bindings.dart
index 870df19..a4220e5 100644
--- a/pkgs/ffigen/test/native_objc_test/string_bindings.dart
+++ b/pkgs/ffigen/test/native_objc_test/string_bindings.dart
@@ -107,6 +107,13 @@
   set kCFAllocatorUseContext(CFAllocatorRef value) =>
       _kCFAllocatorUseContext.value = value;
 
+  ffi.Pointer<ObjCSel> _registerName1(String name) {
+    final cstr = name.toNativeUtf8();
+    final sel = _sel_registerName(cstr.cast());
+    pkg_ffi.calloc.free(cstr);
+    return sel;
+  }
+
   ffi.Pointer<ObjCSel> _sel_registerName(
     ffi.Pointer<pkg_ffi.Char> str,
   ) {
@@ -122,6 +129,13 @@
   late final __sel_registerName = __sel_registerNamePtr
       .asFunction<ffi.Pointer<ObjCSel> Function(ffi.Pointer<pkg_ffi.Char>)>();
 
+  ffi.Pointer<ObjCObject> _getClass1(String name) {
+    final cstr = name.toNativeUtf8();
+    final clazz = _objc_getClass(cstr.cast());
+    pkg_ffi.calloc.free(cstr);
+    return clazz;
+  }
+
   ffi.Pointer<ObjCObject> _objc_getClass(
     ffi.Pointer<pkg_ffi.Char> str,
   ) {
@@ -137,6 +151,9 @@
   late final __objc_getClass = __objc_getClassPtr.asFunction<
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<pkg_ffi.Char>)>();
 
+  late final ffi.Pointer<ObjCObject> _class_NSValue1 = _getClass1("NSValue");
+  late final ffi.Pointer<ObjCObject> _class_NSObject1 = _getClass1("NSObject");
+  late final ffi.Pointer<ObjCSel> _sel_load1 = _registerName1("load");
   void _objc_msgSend_0(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -154,6 +171,9 @@
   late final __objc_msgSend_0 = __objc_msgSend_0Ptr.asFunction<
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initialize1 =
+      _registerName1("initialize");
+  late final ffi.Pointer<ObjCSel> _sel_init1 = _registerName1("init");
   instancetype _objc_msgSend_1(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -171,6 +191,9 @@
   late final __objc_msgSend_1 = __objc_msgSend_1Ptr.asFunction<
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_new1 = _registerName1("new");
+  late final ffi.Pointer<ObjCSel> _sel_allocWithZone_1 =
+      _registerName1("allocWithZone:");
   instancetype _objc_msgSend_2(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -191,6 +214,18 @@
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<_NSZone>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_alloc1 = _registerName1("alloc");
+  late final ffi.Pointer<ObjCSel> _sel_dealloc1 = _registerName1("dealloc");
+  late final ffi.Pointer<ObjCSel> _sel_finalize1 = _registerName1("finalize");
+  late final ffi.Pointer<ObjCSel> _sel_copy1 = _registerName1("copy");
+  late final ffi.Pointer<ObjCSel> _sel_mutableCopy1 =
+      _registerName1("mutableCopy");
+  late final ffi.Pointer<ObjCSel> _sel_copyWithZone_1 =
+      _registerName1("copyWithZone:");
+  late final ffi.Pointer<ObjCSel> _sel_mutableCopyWithZone_1 =
+      _registerName1("mutableCopyWithZone:");
+  late final ffi.Pointer<ObjCSel> _sel_instancesRespondToSelector_1 =
+      _registerName1("instancesRespondToSelector:");
   bool _objc_msgSend_3(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -212,6 +247,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_conformsToProtocol_1 =
+      _registerName1("conformsToProtocol:");
   bool _objc_msgSend_4(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -233,6 +270,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_methodForSelector_1 =
+      _registerName1("methodForSelector:");
   IMP _objc_msgSend_5(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -253,6 +292,10 @@
       IMP Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_instanceMethodForSelector_1 =
+      _registerName1("instanceMethodForSelector:");
+  late final ffi.Pointer<ObjCSel> _sel_doesNotRecognizeSelector_1 =
+      _registerName1("doesNotRecognizeSelector:");
   void _objc_msgSend_6(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -273,6 +316,8 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_forwardingTargetForSelector_1 =
+      _registerName1("forwardingTargetForSelector:");
   ffi.Pointer<ObjCObject> _objc_msgSend_7(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -293,6 +338,8 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_forwardInvocation_1 =
+      _registerName1("forwardInvocation:");
   void _objc_msgSend_8(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -313,6 +360,10 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCObject> _class_NSMethodSignature1 =
+      _getClass1("NSMethodSignature");
+  late final ffi.Pointer<ObjCSel> _sel_methodSignatureForSelector_1 =
+      _registerName1("methodSignatureForSelector:");
   ffi.Pointer<ObjCObject> _objc_msgSend_9(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -333,6 +384,10 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_instanceMethodSignatureForSelector_1 =
+      _registerName1("instanceMethodSignatureForSelector:");
+  late final ffi.Pointer<ObjCSel> _sel_allowsWeakReference1 =
+      _registerName1("allowsWeakReference");
   bool _objc_msgSend_10(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -351,6 +406,15 @@
   late final __objc_msgSend_10 = __objc_msgSend_10Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_retainWeakReference1 =
+      _registerName1("retainWeakReference");
+  late final ffi.Pointer<ObjCSel> _sel_isSubclassOfClass_1 =
+      _registerName1("isSubclassOfClass:");
+  late final ffi.Pointer<ObjCSel> _sel_resolveClassMethod_1 =
+      _registerName1("resolveClassMethod:");
+  late final ffi.Pointer<ObjCSel> _sel_resolveInstanceMethod_1 =
+      _registerName1("resolveInstanceMethod:");
+  late final ffi.Pointer<ObjCSel> _sel_hash1 = _registerName1("hash");
   int _objc_msgSend_11(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -368,6 +432,13 @@
   late final __objc_msgSend_11 = __objc_msgSend_11Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_superclass1 =
+      _registerName1("superclass");
+  late final ffi.Pointer<ObjCSel> _sel_class1 = _registerName1("class");
+  late final ffi.Pointer<ObjCObject> _class_NSString1 = _getClass1("NSString");
+  late final ffi.Pointer<ObjCSel> _sel_length1 = _registerName1("length");
+  late final ffi.Pointer<ObjCSel> _sel_characterAtIndex_1 =
+      _registerName1("characterAtIndex:");
   int _objc_msgSend_12(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -387,6 +458,8 @@
   late final __objc_msgSend_12 = __objc_msgSend_12Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithCoder_1 =
+      _registerName1("initWithCoder:");
   instancetype _objc_msgSend_13(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -407,6 +480,8 @@
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_stringWithCString_encoding_1 =
+      _registerName1("stringWithCString:encoding:");
   ffi.Pointer<ObjCObject> _objc_msgSend_14(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -432,6 +507,8 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<pkg_ffi.Char>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_UTF8String1 =
+      _registerName1("UTF8String");
   ffi.Pointer<pkg_ffi.Char> _objc_msgSend_15(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -450,6 +527,8 @@
       ffi.Pointer<pkg_ffi.Char> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_description1 =
+      _registerName1("description");
   ffi.Pointer<ObjCObject> _objc_msgSend_16(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -468,6 +547,10 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_debugDescription1 =
+      _registerName1("debugDescription");
+  late final ffi.Pointer<ObjCSel> _sel_getValue_size_1 =
+      _registerName1("getValue:size:");
   void _objc_msgSend_17(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -490,6 +573,9 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ffi.Void>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_objCType1 = _registerName1("objCType");
+  late final ffi.Pointer<ObjCSel> _sel_initWithBytes_objCType_1 =
+      _registerName1("initWithBytes:objCType:");
   instancetype _objc_msgSend_18(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -515,6 +601,9 @@
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ffi.Void>, ffi.Pointer<pkg_ffi.Char>)>();
 
+  late final ffi.Pointer<ObjCObject> _class_NSNumber1 = _getClass1("NSNumber");
+  late final ffi.Pointer<ObjCSel> _sel_initWithChar_1 =
+      _registerName1("initWithChar:");
   ffi.Pointer<ObjCObject> _objc_msgSend_19(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -535,6 +624,8 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithUnsignedChar_1 =
+      _registerName1("initWithUnsignedChar:");
   ffi.Pointer<ObjCObject> _objc_msgSend_20(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -555,6 +646,8 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithShort_1 =
+      _registerName1("initWithShort:");
   ffi.Pointer<ObjCObject> _objc_msgSend_21(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -575,6 +668,8 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithUnsignedShort_1 =
+      _registerName1("initWithUnsignedShort:");
   ffi.Pointer<ObjCObject> _objc_msgSend_22(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -595,6 +690,8 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithInt_1 =
+      _registerName1("initWithInt:");
   ffi.Pointer<ObjCObject> _objc_msgSend_23(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -615,6 +712,8 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithUnsignedInt_1 =
+      _registerName1("initWithUnsignedInt:");
   ffi.Pointer<ObjCObject> _objc_msgSend_24(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -635,6 +734,8 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithLong_1 =
+      _registerName1("initWithLong:");
   ffi.Pointer<ObjCObject> _objc_msgSend_25(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -655,6 +756,8 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithUnsignedLong_1 =
+      _registerName1("initWithUnsignedLong:");
   ffi.Pointer<ObjCObject> _objc_msgSend_26(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -675,6 +778,8 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithLongLong_1 =
+      _registerName1("initWithLongLong:");
   ffi.Pointer<ObjCObject> _objc_msgSend_27(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -695,6 +800,8 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithUnsignedLongLong_1 =
+      _registerName1("initWithUnsignedLongLong:");
   ffi.Pointer<ObjCObject> _objc_msgSend_28(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -715,6 +822,8 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithFloat_1 =
+      _registerName1("initWithFloat:");
   ffi.Pointer<ObjCObject> _objc_msgSend_29(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -735,6 +844,8 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, double)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithDouble_1 =
+      _registerName1("initWithDouble:");
   ffi.Pointer<ObjCObject> _objc_msgSend_30(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -755,6 +866,8 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, double)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithBool_1 =
+      _registerName1("initWithBool:");
   ffi.Pointer<ObjCObject> _objc_msgSend_31(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -775,6 +888,11 @@
       ffi.Pointer<ObjCObject> Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithInteger_1 =
+      _registerName1("initWithInteger:");
+  late final ffi.Pointer<ObjCSel> _sel_initWithUnsignedInteger_1 =
+      _registerName1("initWithUnsignedInteger:");
+  late final ffi.Pointer<ObjCSel> _sel_charValue1 = _registerName1("charValue");
   int _objc_msgSend_32(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -792,6 +910,8 @@
   late final __objc_msgSend_32 = __objc_msgSend_32Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_unsignedCharValue1 =
+      _registerName1("unsignedCharValue");
   int _objc_msgSend_33(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -809,6 +929,8 @@
   late final __objc_msgSend_33 = __objc_msgSend_33Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_shortValue1 =
+      _registerName1("shortValue");
   int _objc_msgSend_34(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -826,6 +948,8 @@
   late final __objc_msgSend_34 = __objc_msgSend_34Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_unsignedShortValue1 =
+      _registerName1("unsignedShortValue");
   int _objc_msgSend_35(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -843,6 +967,7 @@
   late final __objc_msgSend_35 = __objc_msgSend_35Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_intValue1 = _registerName1("intValue");
   int _objc_msgSend_36(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -860,6 +985,8 @@
   late final __objc_msgSend_36 = __objc_msgSend_36Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_unsignedIntValue1 =
+      _registerName1("unsignedIntValue");
   int _objc_msgSend_37(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -877,6 +1004,7 @@
   late final __objc_msgSend_37 = __objc_msgSend_37Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_longValue1 = _registerName1("longValue");
   int _objc_msgSend_38(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -894,6 +1022,10 @@
   late final __objc_msgSend_38 = __objc_msgSend_38Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_unsignedLongValue1 =
+      _registerName1("unsignedLongValue");
+  late final ffi.Pointer<ObjCSel> _sel_longLongValue1 =
+      _registerName1("longLongValue");
   int _objc_msgSend_39(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -911,6 +1043,8 @@
   late final __objc_msgSend_39 = __objc_msgSend_39Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_unsignedLongLongValue1 =
+      _registerName1("unsignedLongLongValue");
   int _objc_msgSend_40(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -928,6 +1062,8 @@
   late final __objc_msgSend_40 = __objc_msgSend_40Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_floatValue1 =
+      _registerName1("floatValue");
   double _objc_msgSend_41(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -945,6 +1081,8 @@
   late final __objc_msgSend_41 = __objc_msgSend_41Ptr.asFunction<
       double Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_doubleValue1 =
+      _registerName1("doubleValue");
   double _objc_msgSend_42(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -962,6 +1100,14 @@
   late final __objc_msgSend_42 = __objc_msgSend_42Ptr.asFunction<
       double Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_boolValue1 = _registerName1("boolValue");
+  late final ffi.Pointer<ObjCSel> _sel_integerValue1 =
+      _registerName1("integerValue");
+  late final ffi.Pointer<ObjCSel> _sel_unsignedIntegerValue1 =
+      _registerName1("unsignedIntegerValue");
+  late final ffi.Pointer<ObjCSel> _sel_stringValue1 =
+      _registerName1("stringValue");
+  late final ffi.Pointer<ObjCSel> _sel_compare_1 = _registerName1("compare:");
   int _objc_msgSend_43(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -982,6 +1128,10 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_isEqualToNumber_1 =
+      _registerName1("isEqualToNumber:");
+  late final ffi.Pointer<ObjCSel> _sel_descriptionWithLocale_1 =
+      _registerName1("descriptionWithLocale:");
   ffi.Pointer<ObjCObject> _objc_msgSend_44(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1002,6 +1152,15 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCObject> _class_NSEnumerator1 =
+      _getClass1("NSEnumerator");
+  late final ffi.Pointer<ObjCSel> _sel_nextObject1 =
+      _registerName1("nextObject");
+  late final ffi.Pointer<ObjCObject> _class_NSOrderedCollectionChange1 =
+      _getClass1("NSOrderedCollectionChange");
+  late final ffi.Pointer<ObjCSel> _sel_object1 = _registerName1("object");
+  late final ffi.Pointer<ObjCSel> _sel_changeType1 =
+      _registerName1("changeType");
   int _objc_msgSend_45(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1019,6 +1178,11 @@
   late final __objc_msgSend_45 = __objc_msgSend_45Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_index1 = _registerName1("index");
+  late final ffi.Pointer<ObjCSel> _sel_associatedIndex1 =
+      _registerName1("associatedIndex");
+  late final ffi.Pointer<ObjCSel> _sel_initWithObject_type_index_1 =
+      _registerName1("initWithObject:type:index:");
   instancetype _objc_msgSend_46(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1043,6 +1207,9 @@
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>, int, int)>();
 
+  late final ffi.Pointer<ObjCSel>
+      _sel_initWithObject_type_index_associatedIndex_1 =
+      _registerName1("initWithObject:type:index:associatedIndex:");
   instancetype _objc_msgSend_47(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1074,6 +1241,11 @@
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>, int, int, int)>();
 
+  late final ffi.Pointer<ObjCObject> _class_NSIndexSet1 =
+      _getClass1("NSIndexSet");
+  late final ffi.Pointer<ObjCSel> _sel_indexSet1 = _registerName1("indexSet");
+  late final ffi.Pointer<ObjCSel> _sel_indexSetWithIndex_1 =
+      _registerName1("indexSetWithIndex:");
   instancetype _objc_msgSend_48(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1094,6 +1266,8 @@
       instancetype Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_indexSetWithIndexesInRange_1 =
+      _registerName1("indexSetWithIndexesInRange:");
   instancetype _objc_msgSend_49(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1114,6 +1288,20 @@
       instancetype Function(
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, NSRange)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithIndexesInRange_1 =
+      _registerName1("initWithIndexesInRange:");
+  late final ffi.Pointer<ObjCSel> _sel_initWithIndexSet_1 =
+      _registerName1("initWithIndexSet:");
+  late final ffi.Pointer<ObjCSel> _sel_initWithIndex_1 =
+      _registerName1("initWithIndex:");
+  late final ffi.Pointer<ObjCSel> _sel_isEqualToIndexSet_1 =
+      _registerName1("isEqualToIndexSet:");
+  late final ffi.Pointer<ObjCSel> _sel_count1 = _registerName1("count");
+  late final ffi.Pointer<ObjCSel> _sel_firstIndex1 =
+      _registerName1("firstIndex");
+  late final ffi.Pointer<ObjCSel> _sel_lastIndex1 = _registerName1("lastIndex");
+  late final ffi.Pointer<ObjCSel> _sel_indexGreaterThanIndex_1 =
+      _registerName1("indexGreaterThanIndex:");
   int _objc_msgSend_50(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1133,6 +1321,14 @@
   late final __objc_msgSend_50 = __objc_msgSend_50Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_indexLessThanIndex_1 =
+      _registerName1("indexLessThanIndex:");
+  late final ffi.Pointer<ObjCSel> _sel_indexGreaterThanOrEqualToIndex_1 =
+      _registerName1("indexGreaterThanOrEqualToIndex:");
+  late final ffi.Pointer<ObjCSel> _sel_indexLessThanOrEqualToIndex_1 =
+      _registerName1("indexLessThanOrEqualToIndex:");
+  late final ffi.Pointer<ObjCSel> _sel_getIndexes_maxCount_inIndexRange_1 =
+      _registerName1("getIndexes:maxCount:inIndexRange:");
   int _objc_msgSend_51(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1161,6 +1357,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<NSUInteger>, int, NSRangePointer)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_countOfIndexesInRange_1 =
+      _registerName1("countOfIndexesInRange:");
   int _objc_msgSend_52(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1180,6 +1378,8 @@
   late final __objc_msgSend_52 = __objc_msgSend_52Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, NSRange)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_containsIndex_1 =
+      _registerName1("containsIndex:");
   bool _objc_msgSend_53(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1200,6 +1400,8 @@
   late final __objc_msgSend_53 = __objc_msgSend_53Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_containsIndexesInRange_1 =
+      _registerName1("containsIndexesInRange:");
   bool _objc_msgSend_54(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1220,6 +1422,15 @@
   late final __objc_msgSend_54 = __objc_msgSend_54Ptr.asFunction<
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, NSRange)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_containsIndexes_1 =
+      _registerName1("containsIndexes:");
+  late final ffi.Pointer<ObjCSel> _sel_intersectsIndexesInRange_1 =
+      _registerName1("intersectsIndexesInRange:");
+  late final ffi.Pointer<ObjCSel> _sel_enumerateIndexesUsingBlock_1 =
+      _registerName1("enumerateIndexesUsingBlock:");
+  late final ffi.Pointer<ObjCSel>
+      _sel_enumerateIndexesWithOptions_usingBlock_1 =
+      _registerName1("enumerateIndexesWithOptions:usingBlock:");
   void _objc_msgSend_55(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1242,6 +1453,9 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel>
+      _sel_enumerateIndexesInRange_options_usingBlock_1 =
+      _registerName1("enumerateIndexesInRange:options:usingBlock:");
   void _objc_msgSend_56(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1266,6 +1480,8 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, NSRange, int,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_indexPassingTest_1 =
+      _registerName1("indexPassingTest:");
   int _objc_msgSend_57(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1286,6 +1502,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_indexWithOptions_passingTest_1 =
+      _registerName1("indexWithOptions:passingTest:");
   int _objc_msgSend_58(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1308,6 +1526,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_indexInRange_options_passingTest_1 =
+      _registerName1("indexInRange:options:passingTest:");
   int _objc_msgSend_59(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1332,6 +1552,8 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, NSRange, int,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_indexesPassingTest_1 =
+      _registerName1("indexesPassingTest:");
   ffi.Pointer<ObjCObject> _objc_msgSend_60(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1352,6 +1574,8 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_indexesWithOptions_passingTest_1 =
+      _registerName1("indexesWithOptions:passingTest:");
   ffi.Pointer<ObjCObject> _objc_msgSend_61(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1377,6 +1601,8 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, int, ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_indexesInRange_options_passingTest_1 =
+      _registerName1("indexesInRange:options:passingTest:");
   ffi.Pointer<ObjCObject> _objc_msgSend_62(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1405,6 +1631,22 @@
       ffi.Pointer<ObjCObject> Function(ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCSel>, NSRange, int, ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_enumerateRangesUsingBlock_1 =
+      _registerName1("enumerateRangesUsingBlock:");
+  late final ffi.Pointer<ObjCSel> _sel_enumerateRangesWithOptions_usingBlock_1 =
+      _registerName1("enumerateRangesWithOptions:usingBlock:");
+  late final ffi.Pointer<ObjCSel>
+      _sel_enumerateRangesInRange_options_usingBlock_1 =
+      _registerName1("enumerateRangesInRange:options:usingBlock:");
+  late final ffi.Pointer<ObjCObject> _class_NSMutableIndexSet1 =
+      _getClass1("NSMutableIndexSet");
+  late final ffi.Pointer<ObjCSel> _sel_addIndexes_1 =
+      _registerName1("addIndexes:");
+  late final ffi.Pointer<ObjCSel> _sel_removeIndexes_1 =
+      _registerName1("removeIndexes:");
+  late final ffi.Pointer<ObjCSel> _sel_removeAllIndexes1 =
+      _registerName1("removeAllIndexes");
+  late final ffi.Pointer<ObjCSel> _sel_addIndex_1 = _registerName1("addIndex:");
   void _objc_msgSend_63(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1424,6 +1666,10 @@
   late final __objc_msgSend_63 = __objc_msgSend_63Ptr.asFunction<
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_removeIndex_1 =
+      _registerName1("removeIndex:");
+  late final ffi.Pointer<ObjCSel> _sel_addIndexesInRange_1 =
+      _registerName1("addIndexesInRange:");
   void _objc_msgSend_64(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1443,6 +1689,10 @@
   late final __objc_msgSend_64 = __objc_msgSend_64Ptr.asFunction<
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, NSRange)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_removeIndexesInRange_1 =
+      _registerName1("removeIndexesInRange:");
+  late final ffi.Pointer<ObjCSel> _sel_shiftIndexesStartingAtIndex_by_1 =
+      _registerName1("shiftIndexesStartingAtIndex:by:");
   void _objc_msgSend_65(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1464,6 +1714,14 @@
   late final __objc_msgSend_65 = __objc_msgSend_65Ptr.asFunction<
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int, int)>();
 
+  late final ffi.Pointer<ObjCObject> _class_NSOrderedCollectionDifference1 =
+      _getClass1("NSOrderedCollectionDifference");
+  late final ffi.Pointer<ObjCSel> _sel_initWithChanges_1 =
+      _registerName1("initWithChanges:");
+  late final ffi.Pointer<ObjCSel>
+      _sel_initWithInsertIndexes_insertedObjects_removeIndexes_removedObjects_additionalChanges_1 =
+      _registerName1(
+          "initWithInsertIndexes:insertedObjects:removeIndexes:removedObjects:additionalChanges:");
   instancetype _objc_msgSend_66(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1504,6 +1762,10 @@
           ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel>
+      _sel_initWithInsertIndexes_insertedObjects_removeIndexes_removedObjects_1 =
+      _registerName1(
+          "initWithInsertIndexes:insertedObjects:removeIndexes:removedObjects:");
   instancetype _objc_msgSend_67(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1540,6 +1802,18 @@
           ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_insertions1 =
+      _registerName1("insertions");
+  late final ffi.Pointer<ObjCSel> _sel_removals1 = _registerName1("removals");
+  late final ffi.Pointer<ObjCSel> _sel_hasChanges1 =
+      _registerName1("hasChanges");
+  late final ffi.Pointer<ObjCSel> _sel_inverseDifference1 =
+      _registerName1("inverseDifference");
+  late final ffi.Pointer<ObjCObject> _class_NSArray1 = _getClass1("NSArray");
+  late final ffi.Pointer<ObjCSel> _sel_objectAtIndex_1 =
+      _registerName1("objectAtIndex:");
+  late final ffi.Pointer<ObjCSel> _sel_initWithObjects_count_1 =
+      _registerName1("initWithObjects:count:");
   instancetype _objc_msgSend_68(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1565,6 +1839,12 @@
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ffi.Pointer<ObjCObject>>, int)>();
 
+  late final ffi.Pointer<ObjCObject> _class_NSMutableArray1 =
+      _getClass1("NSMutableArray");
+  late final ffi.Pointer<ObjCSel> _sel_addObject_1 =
+      _registerName1("addObject:");
+  late final ffi.Pointer<ObjCSel> _sel_insertObject_atIndex_1 =
+      _registerName1("insertObject:atIndex:");
   void _objc_msgSend_69(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1587,6 +1867,12 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>, int)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_removeLastObject1 =
+      _registerName1("removeLastObject");
+  late final ffi.Pointer<ObjCSel> _sel_removeObjectAtIndex_1 =
+      _registerName1("removeObjectAtIndex:");
+  late final ffi.Pointer<ObjCSel> _sel_replaceObjectAtIndex_withObject_1 =
+      _registerName1("replaceObjectAtIndex:withObject:");
   void _objc_msgSend_70(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1609,6 +1895,14 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>, int,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithCapacity_1 =
+      _registerName1("initWithCapacity:");
+  late final ffi.Pointer<ObjCObject> _class_NSItemProvider1 =
+      _getClass1("NSItemProvider");
+  late final ffi.Pointer<ObjCSel>
+      _sel_registerDataRepresentationForTypeIdentifier_visibility_loadHandler_1 =
+      _registerName1(
+          "registerDataRepresentationForTypeIdentifier:visibility:loadHandler:");
   void _objc_msgSend_71(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1637,6 +1931,10 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>, int, ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel>
+      _sel_registerFileRepresentationForTypeIdentifier_fileOptions_visibility_loadHandler_1 =
+      _registerName1(
+          "registerFileRepresentationForTypeIdentifier:fileOptions:visibility:loadHandler:");
   void _objc_msgSend_72(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1668,6 +1966,14 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>, int, int, ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_registeredTypeIdentifiers1 =
+      _registerName1("registeredTypeIdentifiers");
+  late final ffi.Pointer<ObjCSel> _sel_hasItemConformingToTypeIdentifier_1 =
+      _registerName1("hasItemConformingToTypeIdentifier:");
+  late final ffi.Pointer<ObjCSel>
+      _sel_hasRepresentationConformingToTypeIdentifier_fileOptions_1 =
+      _registerName1(
+          "hasRepresentationConformingToTypeIdentifier:fileOptions:");
   bool _objc_msgSend_73(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1691,6 +1997,12 @@
       int Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>, int)>();
 
+  late final ffi.Pointer<ObjCObject> _class_NSProgress1 =
+      _getClass1("NSProgress");
+  late final ffi.Pointer<ObjCSel>
+      _sel_loadDataRepresentationForTypeIdentifier_completionHandler_1 =
+      _registerName1(
+          "loadDataRepresentationForTypeIdentifier:completionHandler:");
   ffi.Pointer<ObjCObject> _objc_msgSend_74(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1719,6 +2031,22 @@
           ffi.Pointer<ObjCObject>,
           ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel>
+      _sel_loadFileRepresentationForTypeIdentifier_completionHandler_1 =
+      _registerName1(
+          "loadFileRepresentationForTypeIdentifier:completionHandler:");
+  late final ffi.Pointer<ObjCSel>
+      _sel_loadInPlaceFileRepresentationForTypeIdentifier_completionHandler_1 =
+      _registerName1(
+          "loadInPlaceFileRepresentationForTypeIdentifier:completionHandler:");
+  late final ffi.Pointer<ObjCSel> _sel_suggestedName1 =
+      _registerName1("suggestedName");
+  late final ffi.Pointer<ObjCSel> _sel_setSuggestedName_1 =
+      _registerName1("setSuggestedName:");
+  late final ffi.Pointer<ObjCSel> _sel_initWithObject_1 =
+      _registerName1("initWithObject:");
+  late final ffi.Pointer<ObjCSel> _sel_registerObject_visibility_1 =
+      _registerName1("registerObject:visibility:");
   void _objc_msgSend_75(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1741,6 +2069,15 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>, int)>();
 
+  late final ffi.Pointer<ObjCSel>
+      _sel_registerObjectOfClass_visibility_loadHandler_1 =
+      _registerName1("registerObjectOfClass:visibility:loadHandler:");
+  late final ffi.Pointer<ObjCSel> _sel_canLoadObjectOfClass_1 =
+      _registerName1("canLoadObjectOfClass:");
+  late final ffi.Pointer<ObjCSel> _sel_loadObjectOfClass_completionHandler_1 =
+      _registerName1("loadObjectOfClass:completionHandler:");
+  late final ffi.Pointer<ObjCSel> _sel_initWithItem_typeIdentifier_1 =
+      _registerName1("initWithItem:typeIdentifier:");
   instancetype _objc_msgSend_76(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1766,6 +2103,11 @@
       instancetype Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCObject>)>();
 
+  late final ffi.Pointer<ObjCSel> _sel_initWithContentsOfURL_1 =
+      _registerName1("initWithContentsOfURL:");
+  late final ffi.Pointer<ObjCSel>
+      _sel_registerItemForTypeIdentifier_loadHandler_1 =
+      _registerName1("registerItemForTypeIdentifier:loadHandler:");
   void _objc_msgSend_77(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -1791,6 +2133,9 @@
       void Function(ffi.Pointer<ObjCObject>, ffi.Pointer<ObjCSel>,
           ffi.Pointer<ObjCObject>, NSItemProviderLoadHandler)>();
 
+  late final ffi.Pointer<ObjCSel>
+      _sel_loadItemForTypeIdentifier_options_completionHandler_1 =
+      _registerName1("loadItemForTypeIdentifier:options:completionHandler:");
   void _objc_msgSend_78(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -2103,6 +2448,10 @@
           NSStringEncodingDetectionOptionsKey value) =>
       _NSStringEncodingDetectionLikelyLanguageKey.value = value;
 
+  late final ffi.Pointer<ObjCObject> _class_NSMutableString1 =
+      _getClass1("NSMutableString");
+  late final ffi.Pointer<ObjCSel> _sel_replaceCharactersInRange_withString_1 =
+      _registerName1("replaceCharactersInRange:withString:");
   void _objc_msgSend_79(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -2142,6 +2491,14 @@
   set NSParseErrorException(NSExceptionName value) =>
       _NSParseErrorException.value = value;
 
+  late final ffi.Pointer<ObjCObject> _class_NSSimpleCString1 =
+      _getClass1("NSSimpleCString");
+  late final ffi.Pointer<ObjCObject> _class_NSConstantString1 =
+      _getClass1("NSConstantString");
+  late final ffi.Pointer<ObjCObject> _class_StringUtil1 =
+      _getClass1("StringUtil");
+  late final ffi.Pointer<ObjCSel> _sel_strConcat_with_1 =
+      _registerName1("strConcat:with:");
   ffi.Pointer<ObjCObject> _objc_msgSend_80(
     ffi.Pointer<ObjCObject> obj,
     ffi.Pointer<ObjCSel> sel,
@@ -2267,20 +2624,6 @@
     ffi.NativeFunction<
         CFIndex Function(CFIndex, CFOptionFlags, ffi.Pointer<ffi.Void>)>>;
 
-ffi.Pointer<ObjCSel> _registerName(StringTestObjCLibrary _lib, String name) {
-  final cstr = name.toNativeUtf8();
-  final sel = _lib._sel_registerName(cstr.cast());
-  pkg_ffi.calloc.free(cstr);
-  return sel;
-}
-
-ffi.Pointer<ObjCObject> _getClass(StringTestObjCLibrary _lib, String name) {
-  final cstr = name.toNativeUtf8();
-  final clazz = _lib._objc_getClass(cstr.cast());
-  pkg_ffi.calloc.free(cstr);
-  return clazz;
-}
-
 class _ObjCWrapper {
   final ffi.Pointer<ObjCObject> _id;
   final StringTestObjCLibrary _lib;
@@ -2291,327 +2634,228 @@
   NSValue._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSValue castFrom<T extends _ObjCWrapper>(T other) {
     return NSValue._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_getValue_size;
   void getValue_size(ffi.Pointer<ffi.Void> value, int size) {
-    _sel_getValue_size ??= _registerName(_lib, "getValue:size:");
-    _lib._objc_msgSend_17(_id, _sel_getValue_size!, value, size);
+    _lib._objc_msgSend_17(_id, _lib._sel_getValue_size_1, value, size);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_objCType;
   ffi.Pointer<pkg_ffi.Char> get objCType {
-    _sel_objCType ??= _registerName(_lib, "objCType");
-    return _lib._objc_msgSend_15(_id, _sel_objCType!);
+    return _lib._objc_msgSend_15(_id, _lib._sel_objCType1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithBytes_objCType;
   NSValue initWithBytes_objCType(
       ffi.Pointer<ffi.Void> value, ffi.Pointer<pkg_ffi.Char> type) {
-    _sel_initWithBytes_objCType ??=
-        _registerName(_lib, "initWithBytes:objCType:");
-    final _ret =
-        _lib._objc_msgSend_18(_id, _sel_initWithBytes_objCType!, value, type);
+    final _ret = _lib._objc_msgSend_18(
+        _id, _lib._sel_initWithBytes_objCType_1, value, type);
     return NSValue._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithCoder;
   NSValue initWithCoder(NSObject coder) {
-    _sel_initWithCoder ??= _registerName(_lib, "initWithCoder:");
-    final _ret = _lib._objc_msgSend_13(_id, _sel_initWithCoder!, coder._id);
+    final _ret =
+        _lib._objc_msgSend_13(_id, _lib._sel_initWithCoder_1, coder._id);
     return NSValue._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSValue new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSValue");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSValue1, _lib._sel_new1);
     return NSValue._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSValue alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSValue");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSValue1, _lib._sel_alloc1);
     return NSValue._(_ret, _lib);
   }
 }
 
+class ObjCSel extends ffi.Opaque {}
+
+class ObjCObject extends ffi.Opaque {}
+
 class NSObject extends _ObjCWrapper {
   NSObject._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSObject castFrom<T extends _ObjCWrapper>(T other) {
     return NSObject._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_load;
   static void load(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_load ??= _registerName(_lib, "load");
-    _lib._objc_msgSend_0(_class!, _sel_load!);
+    _lib._objc_msgSend_0(_lib._class_NSObject1, _lib._sel_load1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initialize;
   static void initialize(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_initialize ??= _registerName(_lib, "initialize");
-    _lib._objc_msgSend_0(_class!, _sel_initialize!);
+    _lib._objc_msgSend_0(_lib._class_NSObject1, _lib._sel_initialize1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_init;
   NSObject init() {
-    _sel_init ??= _registerName(_lib, "init");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_init!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_init1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSObject new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_new1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_allocWithZone;
   static NSObject allocWithZone(
       StringTestObjCLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_allocWithZone ??= _registerName(_lib, "allocWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_allocWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_allocWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSObject alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_alloc1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_dealloc;
   void dealloc() {
-    _sel_dealloc ??= _registerName(_lib, "dealloc");
-    _lib._objc_msgSend_0(_id, _sel_dealloc!);
+    _lib._objc_msgSend_0(_id, _lib._sel_dealloc1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_finalize;
   void finalize() {
-    _sel_finalize ??= _registerName(_lib, "finalize");
-    _lib._objc_msgSend_0(_id, _sel_finalize!);
+    _lib._objc_msgSend_0(_id, _lib._sel_finalize1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_copy;
   NSObject copy() {
-    _sel_copy ??= _registerName(_lib, "copy");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_copy!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_copy1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_mutableCopy;
   NSObject mutableCopy() {
-    _sel_mutableCopy ??= _registerName(_lib, "mutableCopy");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_mutableCopy!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_mutableCopy1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_copyWithZone;
   static NSObject copyWithZone(
       StringTestObjCLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_copyWithZone ??= _registerName(_lib, "copyWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_copyWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_copyWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_mutableCopyWithZone;
   static NSObject mutableCopyWithZone(
       StringTestObjCLibrary _lib, ffi.Pointer<_NSZone> zone) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_mutableCopyWithZone ??= _registerName(_lib, "mutableCopyWithZone:");
-    final _ret = _lib._objc_msgSend_2(_class!, _sel_mutableCopyWithZone!, zone);
+    final _ret = _lib._objc_msgSend_2(
+        _lib._class_NSObject1, _lib._sel_mutableCopyWithZone_1, zone);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instancesRespondToSelector;
   static bool instancesRespondToSelector(
       StringTestObjCLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instancesRespondToSelector ??=
-        _registerName(_lib, "instancesRespondToSelector:");
-    return _lib._objc_msgSend_3(
-        _class!, _sel_instancesRespondToSelector!, aSelector);
+    return _lib._objc_msgSend_3(_lib._class_NSObject1,
+        _lib._sel_instancesRespondToSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_conformsToProtocol;
   static bool conformsToProtocol(
       StringTestObjCLibrary _lib, NSObject protocol) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_conformsToProtocol ??= _registerName(_lib, "conformsToProtocol:");
     return _lib._objc_msgSend_4(
-        _class!, _sel_conformsToProtocol!, protocol._id);
+        _lib._class_NSObject1, _lib._sel_conformsToProtocol_1, protocol._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_methodForSelector;
   IMP methodForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_methodForSelector ??= _registerName(_lib, "methodForSelector:");
-    return _lib._objc_msgSend_5(_id, _sel_methodForSelector!, aSelector);
+    return _lib._objc_msgSend_5(_id, _lib._sel_methodForSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instanceMethodForSelector;
   static IMP instanceMethodForSelector(
       StringTestObjCLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instanceMethodForSelector ??=
-        _registerName(_lib, "instanceMethodForSelector:");
-    return _lib._objc_msgSend_5(
-        _class!, _sel_instanceMethodForSelector!, aSelector);
+    return _lib._objc_msgSend_5(_lib._class_NSObject1,
+        _lib._sel_instanceMethodForSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_doesNotRecognizeSelector;
   void doesNotRecognizeSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_doesNotRecognizeSelector ??=
-        _registerName(_lib, "doesNotRecognizeSelector:");
-    _lib._objc_msgSend_6(_id, _sel_doesNotRecognizeSelector!, aSelector);
+    _lib._objc_msgSend_6(_id, _lib._sel_doesNotRecognizeSelector_1, aSelector);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_forwardingTargetForSelector;
   NSObject forwardingTargetForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_forwardingTargetForSelector ??=
-        _registerName(_lib, "forwardingTargetForSelector:");
-    final _ret =
-        _lib._objc_msgSend_7(_id, _sel_forwardingTargetForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_7(
+        _id, _lib._sel_forwardingTargetForSelector_1, aSelector);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_forwardInvocation;
   void forwardInvocation(NSObject anInvocation) {
-    _sel_forwardInvocation ??= _registerName(_lib, "forwardInvocation:");
-    _lib._objc_msgSend_8(_id, _sel_forwardInvocation!, anInvocation._id);
+    _lib._objc_msgSend_8(_id, _lib._sel_forwardInvocation_1, anInvocation._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_methodSignatureForSelector;
   NSMethodSignature methodSignatureForSelector(ffi.Pointer<ObjCSel> aSelector) {
-    _sel_methodSignatureForSelector ??=
-        _registerName(_lib, "methodSignatureForSelector:");
-    final _ret =
-        _lib._objc_msgSend_9(_id, _sel_methodSignatureForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_9(
+        _id, _lib._sel_methodSignatureForSelector_1, aSelector);
     return NSMethodSignature._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_instanceMethodSignatureForSelector;
   static NSMethodSignature instanceMethodSignatureForSelector(
       StringTestObjCLibrary _lib, ffi.Pointer<ObjCSel> aSelector) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_instanceMethodSignatureForSelector ??=
-        _registerName(_lib, "instanceMethodSignatureForSelector:");
-    final _ret = _lib._objc_msgSend_9(
-        _class!, _sel_instanceMethodSignatureForSelector!, aSelector);
+    final _ret = _lib._objc_msgSend_9(_lib._class_NSObject1,
+        _lib._sel_instanceMethodSignatureForSelector_1, aSelector);
     return NSMethodSignature._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_allowsWeakReference;
   bool allowsWeakReference() {
-    _sel_allowsWeakReference ??= _registerName(_lib, "allowsWeakReference");
-    return _lib._objc_msgSend_10(_id, _sel_allowsWeakReference!);
+    return _lib._objc_msgSend_10(_id, _lib._sel_allowsWeakReference1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_retainWeakReference;
   bool retainWeakReference() {
-    _sel_retainWeakReference ??= _registerName(_lib, "retainWeakReference");
-    return _lib._objc_msgSend_10(_id, _sel_retainWeakReference!);
+    return _lib._objc_msgSend_10(_id, _lib._sel_retainWeakReference1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_isSubclassOfClass;
   static bool isSubclassOfClass(StringTestObjCLibrary _lib, NSObject aClass) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_isSubclassOfClass ??= _registerName(_lib, "isSubclassOfClass:");
-    return _lib._objc_msgSend_4(_class!, _sel_isSubclassOfClass!, aClass._id);
+    return _lib._objc_msgSend_4(
+        _lib._class_NSObject1, _lib._sel_isSubclassOfClass_1, aClass._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_resolveClassMethod;
   static bool resolveClassMethod(
       StringTestObjCLibrary _lib, ffi.Pointer<ObjCSel> sel) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_resolveClassMethod ??= _registerName(_lib, "resolveClassMethod:");
-    return _lib._objc_msgSend_3(_class!, _sel_resolveClassMethod!, sel);
+    return _lib._objc_msgSend_3(
+        _lib._class_NSObject1, _lib._sel_resolveClassMethod_1, sel);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_resolveInstanceMethod;
   static bool resolveInstanceMethod(
       StringTestObjCLibrary _lib, ffi.Pointer<ObjCSel> sel) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_resolveInstanceMethod ??=
-        _registerName(_lib, "resolveInstanceMethod:");
-    return _lib._objc_msgSend_3(_class!, _sel_resolveInstanceMethod!, sel);
+    return _lib._objc_msgSend_3(
+        _lib._class_NSObject1, _lib._sel_resolveInstanceMethod_1, sel);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_hash;
   static int hash(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_hash ??= _registerName(_lib, "hash");
-    return _lib._objc_msgSend_11(_class!, _sel_hash!);
+    return _lib._objc_msgSend_11(_lib._class_NSObject1, _lib._sel_hash1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_superclass;
   static NSObject superclass(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_superclass ??= _registerName(_lib, "superclass");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_superclass!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_superclass1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_class1;
   static NSObject class1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_class1 ??= _registerName(_lib, "class");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_class1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSObject1, _lib._sel_class1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_description;
   static NSString description(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_description ??= _registerName(_lib, "description");
-    final _ret = _lib._objc_msgSend_16(_class!, _sel_description!);
+    final _ret =
+        _lib._objc_msgSend_16(_lib._class_NSObject1, _lib._sel_description1);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_debugDescription;
   static NSString debugDescription(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSObject");
-    _sel_debugDescription ??= _registerName(_lib, "debugDescription");
-    final _ret = _lib._objc_msgSend_16(_class!, _sel_debugDescription!);
+    final _ret = _lib._objc_msgSend_16(
+        _lib._class_NSObject1, _lib._sel_debugDescription1);
     return NSString._(_ret, _lib);
   }
 }
 
 typedef instancetype = ffi.Pointer<ObjCObject>;
 
-class ObjCObject extends ffi.Opaque {}
-
 class _NSZone extends ffi.Opaque {}
 
-class ObjCSel extends ffi.Opaque {}
-
 typedef IMP = ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>>;
 
 class NSMethodSignature extends _ObjCWrapper {
   NSMethodSignature._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSMethodSignature castFrom<T extends _ObjCWrapper>(T other) {
     return NSMethodSignature._(other._id, other._lib);
   }
@@ -2623,8 +2867,6 @@
   NSString._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSString castFrom<T extends _ObjCWrapper>(T other) {
     return NSString._(other._id, other._lib);
   }
@@ -2639,63 +2881,44 @@
   @override
   String toString() => UTF8String().cast<pkg_ffi.Utf8>().toDartString();
 
-  static ffi.Pointer<ObjCSel>? _sel_length;
   int get length {
-    _sel_length ??= _registerName(_lib, "length");
-    return _lib._objc_msgSend_11(_id, _sel_length!);
+    return _lib._objc_msgSend_11(_id, _lib._sel_length1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_characterAtIndex;
   int characterAtIndex(int index) {
-    _sel_characterAtIndex ??= _registerName(_lib, "characterAtIndex:");
-    return _lib._objc_msgSend_12(_id, _sel_characterAtIndex!, index);
+    return _lib._objc_msgSend_12(_id, _lib._sel_characterAtIndex_1, index);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_init;
   @override
   NSString init() {
-    _sel_init ??= _registerName(_lib, "init");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_init!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_init1);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithCoder;
   NSString initWithCoder(NSObject coder) {
-    _sel_initWithCoder ??= _registerName(_lib, "initWithCoder:");
-    final _ret = _lib._objc_msgSend_13(_id, _sel_initWithCoder!, coder._id);
+    final _ret =
+        _lib._objc_msgSend_13(_id, _lib._sel_initWithCoder_1, coder._id);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_stringWithCString_encoding;
   static NSString stringWithCString_encoding(
       StringTestObjCLibrary _lib, ffi.Pointer<pkg_ffi.Char> cString, int enc) {
-    _class ??= _getClass(_lib, "NSString");
-    _sel_stringWithCString_encoding ??=
-        _registerName(_lib, "stringWithCString:encoding:");
-    final _ret = _lib._objc_msgSend_14(
-        _class!, _sel_stringWithCString_encoding!, cString, enc);
+    final _ret = _lib._objc_msgSend_14(_lib._class_NSString1,
+        _lib._sel_stringWithCString_encoding_1, cString, enc);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_UTF8String;
   ffi.Pointer<pkg_ffi.Char> UTF8String() {
-    _sel_UTF8String ??= _registerName(_lib, "UTF8String");
-    return _lib._objc_msgSend_15(_id, _sel_UTF8String!);
+    return _lib._objc_msgSend_15(_id, _lib._sel_UTF8String1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSString new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSString");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSString1, _lib._sel_new1);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSString alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSString");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSString1, _lib._sel_alloc1);
     return NSString._(_ret, _lib);
   }
 }
@@ -2710,261 +2933,185 @@
   NSNumber._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSNumber castFrom<T extends _ObjCWrapper>(T other) {
     return NSNumber._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithCoder;
   @override
   NSNumber initWithCoder(NSObject coder) {
-    _sel_initWithCoder ??= _registerName(_lib, "initWithCoder:");
-    final _ret = _lib._objc_msgSend_13(_id, _sel_initWithCoder!, coder._id);
+    final _ret =
+        _lib._objc_msgSend_13(_id, _lib._sel_initWithCoder_1, coder._id);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithChar;
   NSNumber initWithChar(int value) {
-    _sel_initWithChar ??= _registerName(_lib, "initWithChar:");
-    final _ret = _lib._objc_msgSend_19(_id, _sel_initWithChar!, value);
+    final _ret = _lib._objc_msgSend_19(_id, _lib._sel_initWithChar_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithUnsignedChar;
   NSNumber initWithUnsignedChar(int value) {
-    _sel_initWithUnsignedChar ??= _registerName(_lib, "initWithUnsignedChar:");
-    final _ret = _lib._objc_msgSend_20(_id, _sel_initWithUnsignedChar!, value);
+    final _ret =
+        _lib._objc_msgSend_20(_id, _lib._sel_initWithUnsignedChar_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithShort;
   NSNumber initWithShort(int value) {
-    _sel_initWithShort ??= _registerName(_lib, "initWithShort:");
-    final _ret = _lib._objc_msgSend_21(_id, _sel_initWithShort!, value);
+    final _ret = _lib._objc_msgSend_21(_id, _lib._sel_initWithShort_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithUnsignedShort;
   NSNumber initWithUnsignedShort(int value) {
-    _sel_initWithUnsignedShort ??=
-        _registerName(_lib, "initWithUnsignedShort:");
-    final _ret = _lib._objc_msgSend_22(_id, _sel_initWithUnsignedShort!, value);
+    final _ret =
+        _lib._objc_msgSend_22(_id, _lib._sel_initWithUnsignedShort_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithInt;
   NSNumber initWithInt(int value) {
-    _sel_initWithInt ??= _registerName(_lib, "initWithInt:");
-    final _ret = _lib._objc_msgSend_23(_id, _sel_initWithInt!, value);
+    final _ret = _lib._objc_msgSend_23(_id, _lib._sel_initWithInt_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithUnsignedInt;
   NSNumber initWithUnsignedInt(int value) {
-    _sel_initWithUnsignedInt ??= _registerName(_lib, "initWithUnsignedInt:");
-    final _ret = _lib._objc_msgSend_24(_id, _sel_initWithUnsignedInt!, value);
+    final _ret =
+        _lib._objc_msgSend_24(_id, _lib._sel_initWithUnsignedInt_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithLong;
   NSNumber initWithLong(int value) {
-    _sel_initWithLong ??= _registerName(_lib, "initWithLong:");
-    final _ret = _lib._objc_msgSend_25(_id, _sel_initWithLong!, value);
+    final _ret = _lib._objc_msgSend_25(_id, _lib._sel_initWithLong_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithUnsignedLong;
   NSNumber initWithUnsignedLong(int value) {
-    _sel_initWithUnsignedLong ??= _registerName(_lib, "initWithUnsignedLong:");
-    final _ret = _lib._objc_msgSend_26(_id, _sel_initWithUnsignedLong!, value);
+    final _ret =
+        _lib._objc_msgSend_26(_id, _lib._sel_initWithUnsignedLong_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithLongLong;
   NSNumber initWithLongLong(int value) {
-    _sel_initWithLongLong ??= _registerName(_lib, "initWithLongLong:");
-    final _ret = _lib._objc_msgSend_27(_id, _sel_initWithLongLong!, value);
+    final _ret =
+        _lib._objc_msgSend_27(_id, _lib._sel_initWithLongLong_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithUnsignedLongLong;
   NSNumber initWithUnsignedLongLong(int value) {
-    _sel_initWithUnsignedLongLong ??=
-        _registerName(_lib, "initWithUnsignedLongLong:");
     final _ret =
-        _lib._objc_msgSend_28(_id, _sel_initWithUnsignedLongLong!, value);
+        _lib._objc_msgSend_28(_id, _lib._sel_initWithUnsignedLongLong_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithFloat;
   NSNumber initWithFloat(double value) {
-    _sel_initWithFloat ??= _registerName(_lib, "initWithFloat:");
-    final _ret = _lib._objc_msgSend_29(_id, _sel_initWithFloat!, value);
+    final _ret = _lib._objc_msgSend_29(_id, _lib._sel_initWithFloat_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithDouble;
   NSNumber initWithDouble(double value) {
-    _sel_initWithDouble ??= _registerName(_lib, "initWithDouble:");
-    final _ret = _lib._objc_msgSend_30(_id, _sel_initWithDouble!, value);
+    final _ret = _lib._objc_msgSend_30(_id, _lib._sel_initWithDouble_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithBool;
   NSNumber initWithBool(bool value) {
-    _sel_initWithBool ??= _registerName(_lib, "initWithBool:");
-    final _ret = _lib._objc_msgSend_31(_id, _sel_initWithBool!, value);
+    final _ret = _lib._objc_msgSend_31(_id, _lib._sel_initWithBool_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithInteger;
   NSNumber initWithInteger(int value) {
-    _sel_initWithInteger ??= _registerName(_lib, "initWithInteger:");
-    final _ret = _lib._objc_msgSend_25(_id, _sel_initWithInteger!, value);
+    final _ret = _lib._objc_msgSend_25(_id, _lib._sel_initWithInteger_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithUnsignedInteger;
   NSNumber initWithUnsignedInteger(int value) {
-    _sel_initWithUnsignedInteger ??=
-        _registerName(_lib, "initWithUnsignedInteger:");
     final _ret =
-        _lib._objc_msgSend_26(_id, _sel_initWithUnsignedInteger!, value);
+        _lib._objc_msgSend_26(_id, _lib._sel_initWithUnsignedInteger_1, value);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_charValue;
   int get charValue {
-    _sel_charValue ??= _registerName(_lib, "charValue");
-    return _lib._objc_msgSend_32(_id, _sel_charValue!);
+    return _lib._objc_msgSend_32(_id, _lib._sel_charValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_unsignedCharValue;
   int get unsignedCharValue {
-    _sel_unsignedCharValue ??= _registerName(_lib, "unsignedCharValue");
-    return _lib._objc_msgSend_33(_id, _sel_unsignedCharValue!);
+    return _lib._objc_msgSend_33(_id, _lib._sel_unsignedCharValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_shortValue;
   int get shortValue {
-    _sel_shortValue ??= _registerName(_lib, "shortValue");
-    return _lib._objc_msgSend_34(_id, _sel_shortValue!);
+    return _lib._objc_msgSend_34(_id, _lib._sel_shortValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_unsignedShortValue;
   int get unsignedShortValue {
-    _sel_unsignedShortValue ??= _registerName(_lib, "unsignedShortValue");
-    return _lib._objc_msgSend_35(_id, _sel_unsignedShortValue!);
+    return _lib._objc_msgSend_35(_id, _lib._sel_unsignedShortValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_intValue;
   int get intValue {
-    _sel_intValue ??= _registerName(_lib, "intValue");
-    return _lib._objc_msgSend_36(_id, _sel_intValue!);
+    return _lib._objc_msgSend_36(_id, _lib._sel_intValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_unsignedIntValue;
   int get unsignedIntValue {
-    _sel_unsignedIntValue ??= _registerName(_lib, "unsignedIntValue");
-    return _lib._objc_msgSend_37(_id, _sel_unsignedIntValue!);
+    return _lib._objc_msgSend_37(_id, _lib._sel_unsignedIntValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_longValue;
   int get longValue {
-    _sel_longValue ??= _registerName(_lib, "longValue");
-    return _lib._objc_msgSend_38(_id, _sel_longValue!);
+    return _lib._objc_msgSend_38(_id, _lib._sel_longValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_unsignedLongValue;
   int get unsignedLongValue {
-    _sel_unsignedLongValue ??= _registerName(_lib, "unsignedLongValue");
-    return _lib._objc_msgSend_11(_id, _sel_unsignedLongValue!);
+    return _lib._objc_msgSend_11(_id, _lib._sel_unsignedLongValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_longLongValue;
   int get longLongValue {
-    _sel_longLongValue ??= _registerName(_lib, "longLongValue");
-    return _lib._objc_msgSend_39(_id, _sel_longLongValue!);
+    return _lib._objc_msgSend_39(_id, _lib._sel_longLongValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_unsignedLongLongValue;
   int get unsignedLongLongValue {
-    _sel_unsignedLongLongValue ??= _registerName(_lib, "unsignedLongLongValue");
-    return _lib._objc_msgSend_40(_id, _sel_unsignedLongLongValue!);
+    return _lib._objc_msgSend_40(_id, _lib._sel_unsignedLongLongValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_floatValue;
   double get floatValue {
-    _sel_floatValue ??= _registerName(_lib, "floatValue");
-    return _lib._objc_msgSend_41(_id, _sel_floatValue!);
+    return _lib._objc_msgSend_41(_id, _lib._sel_floatValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_doubleValue;
   double get doubleValue {
-    _sel_doubleValue ??= _registerName(_lib, "doubleValue");
-    return _lib._objc_msgSend_42(_id, _sel_doubleValue!);
+    return _lib._objc_msgSend_42(_id, _lib._sel_doubleValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_boolValue;
   bool get boolValue {
-    _sel_boolValue ??= _registerName(_lib, "boolValue");
-    return _lib._objc_msgSend_10(_id, _sel_boolValue!);
+    return _lib._objc_msgSend_10(_id, _lib._sel_boolValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_integerValue;
   int get integerValue {
-    _sel_integerValue ??= _registerName(_lib, "integerValue");
-    return _lib._objc_msgSend_38(_id, _sel_integerValue!);
+    return _lib._objc_msgSend_38(_id, _lib._sel_integerValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_unsignedIntegerValue;
   int get unsignedIntegerValue {
-    _sel_unsignedIntegerValue ??= _registerName(_lib, "unsignedIntegerValue");
-    return _lib._objc_msgSend_11(_id, _sel_unsignedIntegerValue!);
+    return _lib._objc_msgSend_11(_id, _lib._sel_unsignedIntegerValue1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_stringValue;
   NSObject get stringValue {
-    _sel_stringValue ??= _registerName(_lib, "stringValue");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_stringValue!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_stringValue1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_compare;
   int compare(NSObject otherNumber) {
-    _sel_compare ??= _registerName(_lib, "compare:");
-    return _lib._objc_msgSend_43(_id, _sel_compare!, otherNumber._id);
+    return _lib._objc_msgSend_43(_id, _lib._sel_compare_1, otherNumber._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_isEqualToNumber;
   bool isEqualToNumber(NSObject number) {
-    _sel_isEqualToNumber ??= _registerName(_lib, "isEqualToNumber:");
-    return _lib._objc_msgSend_4(_id, _sel_isEqualToNumber!, number._id);
+    return _lib._objc_msgSend_4(_id, _lib._sel_isEqualToNumber_1, number._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_descriptionWithLocale;
   NSString descriptionWithLocale(NSObject locale) {
-    _sel_descriptionWithLocale ??=
-        _registerName(_lib, "descriptionWithLocale:");
-    final _ret =
-        _lib._objc_msgSend_44(_id, _sel_descriptionWithLocale!, locale._id);
+    final _ret = _lib._objc_msgSend_44(
+        _id, _lib._sel_descriptionWithLocale_1, locale._id);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSNumber new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSNumber");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSNumber1, _lib._sel_new1);
     return NSNumber._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSNumber alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSNumber");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSNumber1, _lib._sel_alloc1);
     return NSNumber._(_ret, _lib);
   }
 }
@@ -2993,32 +3140,24 @@
   NSEnumerator._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSEnumerator castFrom<T extends _ObjCWrapper>(T other) {
     return NSEnumerator._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_nextObject;
   NSObject nextObject() {
-    _sel_nextObject ??= _registerName(_lib, "nextObject");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_nextObject!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_nextObject1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSEnumerator new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSEnumerator");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSEnumerator1, _lib._sel_new1);
     return NSEnumerator._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSEnumerator alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSEnumerator");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSEnumerator1, _lib._sel_alloc1);
     return NSEnumerator._(_ret, _lib);
   }
 }
@@ -3033,63 +3172,45 @@
       ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSOrderedCollectionChange castFrom<T extends _ObjCWrapper>(T other) {
     return NSOrderedCollectionChange._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_object;
   NSObject get object {
-    _sel_object ??= _registerName(_lib, "object");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_object!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_object1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_changeType;
   int get changeType {
-    _sel_changeType ??= _registerName(_lib, "changeType");
-    return _lib._objc_msgSend_45(_id, _sel_changeType!);
+    return _lib._objc_msgSend_45(_id, _lib._sel_changeType1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_index;
   int get index {
-    _sel_index ??= _registerName(_lib, "index");
-    return _lib._objc_msgSend_11(_id, _sel_index!);
+    return _lib._objc_msgSend_11(_id, _lib._sel_index1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_associatedIndex;
   int get associatedIndex {
-    _sel_associatedIndex ??= _registerName(_lib, "associatedIndex");
-    return _lib._objc_msgSend_11(_id, _sel_associatedIndex!);
+    return _lib._objc_msgSend_11(_id, _lib._sel_associatedIndex1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_init;
   @override
   NSObject init() {
-    _sel_init ??= _registerName(_lib, "init");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_init!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_init1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithObject_type_index;
   NSOrderedCollectionChange initWithObject_type_index(
       NSObject anObject, int type, int index) {
-    _sel_initWithObject_type_index ??=
-        _registerName(_lib, "initWithObject:type:index:");
     final _ret = _lib._objc_msgSend_46(
-        _id, _sel_initWithObject_type_index!, anObject._id, type, index);
+        _id, _lib._sel_initWithObject_type_index_1, anObject._id, type, index);
     return NSOrderedCollectionChange._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithObject_type_index_associatedIndex;
   NSOrderedCollectionChange initWithObject_type_index_associatedIndex(
       NSObject anObject, int type, int index, int associatedIndex) {
-    _sel_initWithObject_type_index_associatedIndex ??=
-        _registerName(_lib, "initWithObject:type:index:associatedIndex:");
     final _ret = _lib._objc_msgSend_47(
         _id,
-        _sel_initWithObject_type_index_associatedIndex!,
+        _lib._sel_initWithObject_type_index_associatedIndex_1,
         anObject._id,
         type,
         index,
@@ -3097,19 +3218,15 @@
     return NSOrderedCollectionChange._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSOrderedCollectionChange new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSOrderedCollectionChange");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(
+        _lib._class_NSOrderedCollectionChange1, _lib._sel_new1);
     return NSOrderedCollectionChange._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSOrderedCollectionChange alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSOrderedCollectionChange");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(
+        _lib._class_NSOrderedCollectionChange1, _lib._sel_alloc1);
     return NSOrderedCollectionChange._(_ret, _lib);
   }
 }
@@ -3118,268 +3235,203 @@
   NSIndexSet._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSIndexSet castFrom<T extends _ObjCWrapper>(T other) {
     return NSIndexSet._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexSet;
   static NSIndexSet indexSet(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSIndexSet");
-    _sel_indexSet ??= _registerName(_lib, "indexSet");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_indexSet!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSIndexSet1, _lib._sel_indexSet1);
     return NSIndexSet._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexSetWithIndex;
   static NSIndexSet indexSetWithIndex(StringTestObjCLibrary _lib, int value) {
-    _class ??= _getClass(_lib, "NSIndexSet");
-    _sel_indexSetWithIndex ??= _registerName(_lib, "indexSetWithIndex:");
-    final _ret = _lib._objc_msgSend_48(_class!, _sel_indexSetWithIndex!, value);
+    final _ret = _lib._objc_msgSend_48(
+        _lib._class_NSIndexSet1, _lib._sel_indexSetWithIndex_1, value);
     return NSIndexSet._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexSetWithIndexesInRange;
   static NSIndexSet indexSetWithIndexesInRange(
       StringTestObjCLibrary _lib, NSRange range) {
-    _class ??= _getClass(_lib, "NSIndexSet");
-    _sel_indexSetWithIndexesInRange ??=
-        _registerName(_lib, "indexSetWithIndexesInRange:");
-    final _ret =
-        _lib._objc_msgSend_49(_class!, _sel_indexSetWithIndexesInRange!, range);
+    final _ret = _lib._objc_msgSend_49(
+        _lib._class_NSIndexSet1, _lib._sel_indexSetWithIndexesInRange_1, range);
     return NSIndexSet._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithIndexesInRange;
   NSIndexSet initWithIndexesInRange(NSRange range) {
-    _sel_initWithIndexesInRange ??=
-        _registerName(_lib, "initWithIndexesInRange:");
     final _ret =
-        _lib._objc_msgSend_49(_id, _sel_initWithIndexesInRange!, range);
+        _lib._objc_msgSend_49(_id, _lib._sel_initWithIndexesInRange_1, range);
     return NSIndexSet._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithIndexSet;
   NSIndexSet initWithIndexSet(NSObject indexSet) {
-    _sel_initWithIndexSet ??= _registerName(_lib, "initWithIndexSet:");
     final _ret =
-        _lib._objc_msgSend_13(_id, _sel_initWithIndexSet!, indexSet._id);
+        _lib._objc_msgSend_13(_id, _lib._sel_initWithIndexSet_1, indexSet._id);
     return NSIndexSet._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithIndex;
   NSIndexSet initWithIndex(int value) {
-    _sel_initWithIndex ??= _registerName(_lib, "initWithIndex:");
-    final _ret = _lib._objc_msgSend_48(_id, _sel_initWithIndex!, value);
+    final _ret = _lib._objc_msgSend_48(_id, _lib._sel_initWithIndex_1, value);
     return NSIndexSet._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_isEqualToIndexSet;
   bool isEqualToIndexSet(NSObject indexSet) {
-    _sel_isEqualToIndexSet ??= _registerName(_lib, "isEqualToIndexSet:");
-    return _lib._objc_msgSend_4(_id, _sel_isEqualToIndexSet!, indexSet._id);
+    return _lib._objc_msgSend_4(
+        _id, _lib._sel_isEqualToIndexSet_1, indexSet._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_count;
   int get count {
-    _sel_count ??= _registerName(_lib, "count");
-    return _lib._objc_msgSend_11(_id, _sel_count!);
+    return _lib._objc_msgSend_11(_id, _lib._sel_count1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_firstIndex;
   int get firstIndex {
-    _sel_firstIndex ??= _registerName(_lib, "firstIndex");
-    return _lib._objc_msgSend_11(_id, _sel_firstIndex!);
+    return _lib._objc_msgSend_11(_id, _lib._sel_firstIndex1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_lastIndex;
   int get lastIndex {
-    _sel_lastIndex ??= _registerName(_lib, "lastIndex");
-    return _lib._objc_msgSend_11(_id, _sel_lastIndex!);
+    return _lib._objc_msgSend_11(_id, _lib._sel_lastIndex1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexGreaterThanIndex;
   int indexGreaterThanIndex(int value) {
-    _sel_indexGreaterThanIndex ??=
-        _registerName(_lib, "indexGreaterThanIndex:");
-    return _lib._objc_msgSend_50(_id, _sel_indexGreaterThanIndex!, value);
+    return _lib._objc_msgSend_50(_id, _lib._sel_indexGreaterThanIndex_1, value);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexLessThanIndex;
   int indexLessThanIndex(int value) {
-    _sel_indexLessThanIndex ??= _registerName(_lib, "indexLessThanIndex:");
-    return _lib._objc_msgSend_50(_id, _sel_indexLessThanIndex!, value);
+    return _lib._objc_msgSend_50(_id, _lib._sel_indexLessThanIndex_1, value);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexGreaterThanOrEqualToIndex;
   int indexGreaterThanOrEqualToIndex(int value) {
-    _sel_indexGreaterThanOrEqualToIndex ??=
-        _registerName(_lib, "indexGreaterThanOrEqualToIndex:");
     return _lib._objc_msgSend_50(
-        _id, _sel_indexGreaterThanOrEqualToIndex!, value);
+        _id, _lib._sel_indexGreaterThanOrEqualToIndex_1, value);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexLessThanOrEqualToIndex;
   int indexLessThanOrEqualToIndex(int value) {
-    _sel_indexLessThanOrEqualToIndex ??=
-        _registerName(_lib, "indexLessThanOrEqualToIndex:");
-    return _lib._objc_msgSend_50(_id, _sel_indexLessThanOrEqualToIndex!, value);
+    return _lib._objc_msgSend_50(
+        _id, _lib._sel_indexLessThanOrEqualToIndex_1, value);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_getIndexes_maxCount_inIndexRange;
   int getIndexes_maxCount_inIndexRange(ffi.Pointer<NSUInteger> indexBuffer,
       int bufferSize, NSRangePointer range) {
-    _sel_getIndexes_maxCount_inIndexRange ??=
-        _registerName(_lib, "getIndexes:maxCount:inIndexRange:");
-    return _lib._objc_msgSend_51(_id, _sel_getIndexes_maxCount_inIndexRange!,
-        indexBuffer, bufferSize, range);
+    return _lib._objc_msgSend_51(
+        _id,
+        _lib._sel_getIndexes_maxCount_inIndexRange_1,
+        indexBuffer,
+        bufferSize,
+        range);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_countOfIndexesInRange;
   int countOfIndexesInRange(NSRange range) {
-    _sel_countOfIndexesInRange ??=
-        _registerName(_lib, "countOfIndexesInRange:");
-    return _lib._objc_msgSend_52(_id, _sel_countOfIndexesInRange!, range);
+    return _lib._objc_msgSend_52(_id, _lib._sel_countOfIndexesInRange_1, range);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_containsIndex;
   bool containsIndex(int value) {
-    _sel_containsIndex ??= _registerName(_lib, "containsIndex:");
-    return _lib._objc_msgSend_53(_id, _sel_containsIndex!, value);
+    return _lib._objc_msgSend_53(_id, _lib._sel_containsIndex_1, value);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_containsIndexesInRange;
   bool containsIndexesInRange(NSRange range) {
-    _sel_containsIndexesInRange ??=
-        _registerName(_lib, "containsIndexesInRange:");
-    return _lib._objc_msgSend_54(_id, _sel_containsIndexesInRange!, range);
+    return _lib._objc_msgSend_54(
+        _id, _lib._sel_containsIndexesInRange_1, range);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_containsIndexes;
   bool containsIndexes(NSObject indexSet) {
-    _sel_containsIndexes ??= _registerName(_lib, "containsIndexes:");
-    return _lib._objc_msgSend_4(_id, _sel_containsIndexes!, indexSet._id);
+    return _lib._objc_msgSend_4(_id, _lib._sel_containsIndexes_1, indexSet._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_intersectsIndexesInRange;
   bool intersectsIndexesInRange(NSRange range) {
-    _sel_intersectsIndexesInRange ??=
-        _registerName(_lib, "intersectsIndexesInRange:");
-    return _lib._objc_msgSend_54(_id, _sel_intersectsIndexesInRange!, range);
+    return _lib._objc_msgSend_54(
+        _id, _lib._sel_intersectsIndexesInRange_1, range);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_enumerateIndexesUsingBlock;
   void enumerateIndexesUsingBlock(NSObject block) {
-    _sel_enumerateIndexesUsingBlock ??=
-        _registerName(_lib, "enumerateIndexesUsingBlock:");
-    _lib._objc_msgSend_8(_id, _sel_enumerateIndexesUsingBlock!, block._id);
+    _lib._objc_msgSend_8(
+        _id, _lib._sel_enumerateIndexesUsingBlock_1, block._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_enumerateIndexesWithOptions_usingBlock;
   void enumerateIndexesWithOptions_usingBlock(int opts, NSObject block) {
-    _sel_enumerateIndexesWithOptions_usingBlock ??=
-        _registerName(_lib, "enumerateIndexesWithOptions:usingBlock:");
-    _lib._objc_msgSend_55(
-        _id, _sel_enumerateIndexesWithOptions_usingBlock!, opts, block._id);
+    _lib._objc_msgSend_55(_id,
+        _lib._sel_enumerateIndexesWithOptions_usingBlock_1, opts, block._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_enumerateIndexesInRange_options_usingBlock;
   void enumerateIndexesInRange_options_usingBlock(
       NSRange range, int opts, NSObject block) {
-    _sel_enumerateIndexesInRange_options_usingBlock ??=
-        _registerName(_lib, "enumerateIndexesInRange:options:usingBlock:");
-    _lib._objc_msgSend_56(_id, _sel_enumerateIndexesInRange_options_usingBlock!,
-        range, opts, block._id);
+    _lib._objc_msgSend_56(
+        _id,
+        _lib._sel_enumerateIndexesInRange_options_usingBlock_1,
+        range,
+        opts,
+        block._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexPassingTest;
   int indexPassingTest(NSObject predicate) {
-    _sel_indexPassingTest ??= _registerName(_lib, "indexPassingTest:");
-    return _lib._objc_msgSend_57(_id, _sel_indexPassingTest!, predicate._id);
+    return _lib._objc_msgSend_57(
+        _id, _lib._sel_indexPassingTest_1, predicate._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexWithOptions_passingTest;
   int indexWithOptions_passingTest(int opts, NSObject predicate) {
-    _sel_indexWithOptions_passingTest ??=
-        _registerName(_lib, "indexWithOptions:passingTest:");
     return _lib._objc_msgSend_58(
-        _id, _sel_indexWithOptions_passingTest!, opts, predicate._id);
+        _id, _lib._sel_indexWithOptions_passingTest_1, opts, predicate._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexInRange_options_passingTest;
   int indexInRange_options_passingTest(
       NSRange range, int opts, NSObject predicate) {
-    _sel_indexInRange_options_passingTest ??=
-        _registerName(_lib, "indexInRange:options:passingTest:");
-    return _lib._objc_msgSend_59(_id, _sel_indexInRange_options_passingTest!,
-        range, opts, predicate._id);
+    return _lib._objc_msgSend_59(
+        _id,
+        _lib._sel_indexInRange_options_passingTest_1,
+        range,
+        opts,
+        predicate._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexesPassingTest;
   NSIndexSet indexesPassingTest(NSObject predicate) {
-    _sel_indexesPassingTest ??= _registerName(_lib, "indexesPassingTest:");
-    final _ret =
-        _lib._objc_msgSend_60(_id, _sel_indexesPassingTest!, predicate._id);
+    final _ret = _lib._objc_msgSend_60(
+        _id, _lib._sel_indexesPassingTest_1, predicate._id);
     return NSIndexSet._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexesWithOptions_passingTest;
   NSIndexSet indexesWithOptions_passingTest(int opts, NSObject predicate) {
-    _sel_indexesWithOptions_passingTest ??=
-        _registerName(_lib, "indexesWithOptions:passingTest:");
     final _ret = _lib._objc_msgSend_61(
-        _id, _sel_indexesWithOptions_passingTest!, opts, predicate._id);
+        _id, _lib._sel_indexesWithOptions_passingTest_1, opts, predicate._id);
     return NSIndexSet._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexesInRange_options_passingTest;
   NSIndexSet indexesInRange_options_passingTest(
       NSRange range, int opts, NSObject predicate) {
-    _sel_indexesInRange_options_passingTest ??=
-        _registerName(_lib, "indexesInRange:options:passingTest:");
-    final _ret = _lib._objc_msgSend_62(_id,
-        _sel_indexesInRange_options_passingTest!, range, opts, predicate._id);
+    final _ret = _lib._objc_msgSend_62(
+        _id,
+        _lib._sel_indexesInRange_options_passingTest_1,
+        range,
+        opts,
+        predicate._id);
     return NSIndexSet._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_enumerateRangesUsingBlock;
   void enumerateRangesUsingBlock(NSObject block) {
-    _sel_enumerateRangesUsingBlock ??=
-        _registerName(_lib, "enumerateRangesUsingBlock:");
-    _lib._objc_msgSend_8(_id, _sel_enumerateRangesUsingBlock!, block._id);
+    _lib._objc_msgSend_8(_id, _lib._sel_enumerateRangesUsingBlock_1, block._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_enumerateRangesWithOptions_usingBlock;
   void enumerateRangesWithOptions_usingBlock(int opts, NSObject block) {
-    _sel_enumerateRangesWithOptions_usingBlock ??=
-        _registerName(_lib, "enumerateRangesWithOptions:usingBlock:");
-    _lib._objc_msgSend_55(
-        _id, _sel_enumerateRangesWithOptions_usingBlock!, opts, block._id);
+    _lib._objc_msgSend_55(_id,
+        _lib._sel_enumerateRangesWithOptions_usingBlock_1, opts, block._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_enumerateRangesInRange_options_usingBlock;
   void enumerateRangesInRange_options_usingBlock(
       NSRange range, int opts, NSObject block) {
-    _sel_enumerateRangesInRange_options_usingBlock ??=
-        _registerName(_lib, "enumerateRangesInRange:options:usingBlock:");
-    _lib._objc_msgSend_56(_id, _sel_enumerateRangesInRange_options_usingBlock!,
-        range, opts, block._id);
+    _lib._objc_msgSend_56(
+        _id,
+        _lib._sel_enumerateRangesInRange_options_usingBlock_1,
+        range,
+        opts,
+        block._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSIndexSet new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSIndexSet");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSIndexSet1, _lib._sel_new1);
     return NSIndexSet._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSIndexSet alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSIndexSet");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSIndexSet1, _lib._sel_alloc1);
     return NSIndexSet._(_ret, _lib);
   }
 }
@@ -3391,103 +3443,72 @@
   NSMutableIndexSet._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSMutableIndexSet castFrom<T extends _ObjCWrapper>(T other) {
     return NSMutableIndexSet._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_addIndexes;
   void addIndexes(NSObject indexSet) {
-    _sel_addIndexes ??= _registerName(_lib, "addIndexes:");
-    _lib._objc_msgSend_8(_id, _sel_addIndexes!, indexSet._id);
+    _lib._objc_msgSend_8(_id, _lib._sel_addIndexes_1, indexSet._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_removeIndexes;
   void removeIndexes(NSObject indexSet) {
-    _sel_removeIndexes ??= _registerName(_lib, "removeIndexes:");
-    _lib._objc_msgSend_8(_id, _sel_removeIndexes!, indexSet._id);
+    _lib._objc_msgSend_8(_id, _lib._sel_removeIndexes_1, indexSet._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_removeAllIndexes;
   void removeAllIndexes() {
-    _sel_removeAllIndexes ??= _registerName(_lib, "removeAllIndexes");
-    _lib._objc_msgSend_0(_id, _sel_removeAllIndexes!);
+    _lib._objc_msgSend_0(_id, _lib._sel_removeAllIndexes1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_addIndex;
   void addIndex(int value) {
-    _sel_addIndex ??= _registerName(_lib, "addIndex:");
-    _lib._objc_msgSend_63(_id, _sel_addIndex!, value);
+    _lib._objc_msgSend_63(_id, _lib._sel_addIndex_1, value);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_removeIndex;
   void removeIndex(int value) {
-    _sel_removeIndex ??= _registerName(_lib, "removeIndex:");
-    _lib._objc_msgSend_63(_id, _sel_removeIndex!, value);
+    _lib._objc_msgSend_63(_id, _lib._sel_removeIndex_1, value);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_addIndexesInRange;
   void addIndexesInRange(NSRange range) {
-    _sel_addIndexesInRange ??= _registerName(_lib, "addIndexesInRange:");
-    _lib._objc_msgSend_64(_id, _sel_addIndexesInRange!, range);
+    _lib._objc_msgSend_64(_id, _lib._sel_addIndexesInRange_1, range);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_removeIndexesInRange;
   void removeIndexesInRange(NSRange range) {
-    _sel_removeIndexesInRange ??= _registerName(_lib, "removeIndexesInRange:");
-    _lib._objc_msgSend_64(_id, _sel_removeIndexesInRange!, range);
+    _lib._objc_msgSend_64(_id, _lib._sel_removeIndexesInRange_1, range);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_shiftIndexesStartingAtIndex_by;
   void shiftIndexesStartingAtIndex_by(int index, int delta) {
-    _sel_shiftIndexesStartingAtIndex_by ??=
-        _registerName(_lib, "shiftIndexesStartingAtIndex:by:");
     _lib._objc_msgSend_65(
-        _id, _sel_shiftIndexesStartingAtIndex_by!, index, delta);
+        _id, _lib._sel_shiftIndexesStartingAtIndex_by_1, index, delta);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexSet;
   static NSMutableIndexSet indexSet(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSMutableIndexSet");
-    _sel_indexSet ??= _registerName(_lib, "indexSet");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_indexSet!);
+    final _ret = _lib._objc_msgSend_1(
+        _lib._class_NSMutableIndexSet1, _lib._sel_indexSet1);
     return NSMutableIndexSet._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexSetWithIndex;
   static NSMutableIndexSet indexSetWithIndex(
       StringTestObjCLibrary _lib, int value) {
-    _class ??= _getClass(_lib, "NSMutableIndexSet");
-    _sel_indexSetWithIndex ??= _registerName(_lib, "indexSetWithIndex:");
-    final _ret = _lib._objc_msgSend_48(_class!, _sel_indexSetWithIndex!, value);
+    final _ret = _lib._objc_msgSend_48(
+        _lib._class_NSMutableIndexSet1, _lib._sel_indexSetWithIndex_1, value);
     return NSMutableIndexSet._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_indexSetWithIndexesInRange;
   static NSMutableIndexSet indexSetWithIndexesInRange(
       StringTestObjCLibrary _lib, NSRange range) {
-    _class ??= _getClass(_lib, "NSMutableIndexSet");
-    _sel_indexSetWithIndexesInRange ??=
-        _registerName(_lib, "indexSetWithIndexesInRange:");
-    final _ret =
-        _lib._objc_msgSend_49(_class!, _sel_indexSetWithIndexesInRange!, range);
+    final _ret = _lib._objc_msgSend_49(_lib._class_NSMutableIndexSet1,
+        _lib._sel_indexSetWithIndexesInRange_1, range);
     return NSMutableIndexSet._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSMutableIndexSet new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSMutableIndexSet");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSMutableIndexSet1, _lib._sel_new1);
     return NSMutableIndexSet._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSMutableIndexSet alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSMutableIndexSet");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSMutableIndexSet1, _lib._sel_alloc1);
     return NSMutableIndexSet._(_ret, _lib);
   }
 }
@@ -3505,22 +3526,17 @@
       ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSOrderedCollectionDifference castFrom<T extends _ObjCWrapper>(
       T other) {
     return NSOrderedCollectionDifference._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithChanges;
   NSOrderedCollectionDifference initWithChanges(NSObject changes) {
-    _sel_initWithChanges ??= _registerName(_lib, "initWithChanges:");
-    final _ret = _lib._objc_msgSend_13(_id, _sel_initWithChanges!, changes._id);
+    final _ret =
+        _lib._objc_msgSend_13(_id, _lib._sel_initWithChanges_1, changes._id);
     return NSOrderedCollectionDifference._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>?
-      _sel_initWithInsertIndexes_insertedObjects_removeIndexes_removedObjects_additionalChanges;
   NSOrderedCollectionDifference
       initWithInsertIndexes_insertedObjects_removeIndexes_removedObjects_additionalChanges(
           NSObject inserts,
@@ -3528,12 +3544,9 @@
           NSObject removes,
           NSObject removedObjects,
           NSObject changes) {
-    _sel_initWithInsertIndexes_insertedObjects_removeIndexes_removedObjects_additionalChanges ??=
-        _registerName(_lib,
-            "initWithInsertIndexes:insertedObjects:removeIndexes:removedObjects:additionalChanges:");
     final _ret = _lib._objc_msgSend_66(
         _id,
-        _sel_initWithInsertIndexes_insertedObjects_removeIndexes_removedObjects_additionalChanges!,
+        _lib._sel_initWithInsertIndexes_insertedObjects_removeIndexes_removedObjects_additionalChanges_1,
         inserts._id,
         insertedObjects._id,
         removes._id,
@@ -3542,20 +3555,15 @@
     return NSOrderedCollectionDifference._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>?
-      _sel_initWithInsertIndexes_insertedObjects_removeIndexes_removedObjects;
   NSOrderedCollectionDifference
       initWithInsertIndexes_insertedObjects_removeIndexes_removedObjects(
           NSObject inserts,
           NSObject insertedObjects,
           NSObject removes,
           NSObject removedObjects) {
-    _sel_initWithInsertIndexes_insertedObjects_removeIndexes_removedObjects ??=
-        _registerName(_lib,
-            "initWithInsertIndexes:insertedObjects:removeIndexes:removedObjects:");
     final _ret = _lib._objc_msgSend_67(
         _id,
-        _sel_initWithInsertIndexes_insertedObjects_removeIndexes_removedObjects!,
+        _lib._sel_initWithInsertIndexes_insertedObjects_removeIndexes_removedObjects_1,
         inserts._id,
         insertedObjects._id,
         removes._id,
@@ -3563,46 +3571,34 @@
     return NSOrderedCollectionDifference._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_insertions;
   NSObject get insertions {
-    _sel_insertions ??= _registerName(_lib, "insertions");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_insertions!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_insertions1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_removals;
   NSObject get removals {
-    _sel_removals ??= _registerName(_lib, "removals");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_removals!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_removals1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_hasChanges;
   bool get hasChanges {
-    _sel_hasChanges ??= _registerName(_lib, "hasChanges");
-    return _lib._objc_msgSend_10(_id, _sel_hasChanges!);
+    return _lib._objc_msgSend_10(_id, _lib._sel_hasChanges1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_inverseDifference;
   NSOrderedCollectionDifference inverseDifference() {
-    _sel_inverseDifference ??= _registerName(_lib, "inverseDifference");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_inverseDifference!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_inverseDifference1);
     return NSOrderedCollectionDifference._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSOrderedCollectionDifference new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSOrderedCollectionDifference");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(
+        _lib._class_NSOrderedCollectionDifference1, _lib._sel_new1);
     return NSOrderedCollectionDifference._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSOrderedCollectionDifference alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSOrderedCollectionDifference");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(
+        _lib._class_NSOrderedCollectionDifference1, _lib._sel_alloc1);
     return NSOrderedCollectionDifference._(_ret, _lib);
   }
 }
@@ -3611,63 +3607,45 @@
   NSArray._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSArray castFrom<T extends _ObjCWrapper>(T other) {
     return NSArray._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_count;
   int get count {
-    _sel_count ??= _registerName(_lib, "count");
-    return _lib._objc_msgSend_11(_id, _sel_count!);
+    return _lib._objc_msgSend_11(_id, _lib._sel_count1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_objectAtIndex;
   NSObject objectAtIndex(int index) {
-    _sel_objectAtIndex ??= _registerName(_lib, "objectAtIndex:");
-    final _ret = _lib._objc_msgSend_48(_id, _sel_objectAtIndex!, index);
+    final _ret = _lib._objc_msgSend_48(_id, _lib._sel_objectAtIndex_1, index);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_init;
   @override
   NSArray init() {
-    _sel_init ??= _registerName(_lib, "init");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_init!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_init1);
     return NSArray._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithObjects_count;
   NSArray initWithObjects_count(
       ffi.Pointer<ffi.Pointer<ObjCObject>> objects, int cnt) {
-    _sel_initWithObjects_count ??=
-        _registerName(_lib, "initWithObjects:count:");
-    final _ret =
-        _lib._objc_msgSend_68(_id, _sel_initWithObjects_count!, objects, cnt);
+    final _ret = _lib._objc_msgSend_68(
+        _id, _lib._sel_initWithObjects_count_1, objects, cnt);
     return NSArray._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithCoder;
   NSArray initWithCoder(NSObject coder) {
-    _sel_initWithCoder ??= _registerName(_lib, "initWithCoder:");
-    final _ret = _lib._objc_msgSend_13(_id, _sel_initWithCoder!, coder._id);
+    final _ret =
+        _lib._objc_msgSend_13(_id, _lib._sel_initWithCoder_1, coder._id);
     return NSArray._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSArray new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSArray");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSArray1, _lib._sel_new1);
     return NSArray._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSArray alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSArray");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_NSArray1, _lib._sel_alloc1);
     return NSArray._(_ret, _lib);
   }
 }
@@ -3682,80 +3660,60 @@
   NSMutableArray._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSMutableArray castFrom<T extends _ObjCWrapper>(T other) {
     return NSMutableArray._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_addObject;
   void addObject(NSObject anObject) {
-    _sel_addObject ??= _registerName(_lib, "addObject:");
-    _lib._objc_msgSend_8(_id, _sel_addObject!, anObject._id);
+    _lib._objc_msgSend_8(_id, _lib._sel_addObject_1, anObject._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_insertObject_atIndex;
   void insertObject_atIndex(NSObject anObject, int index) {
-    _sel_insertObject_atIndex ??= _registerName(_lib, "insertObject:atIndex:");
-    _lib._objc_msgSend_69(_id, _sel_insertObject_atIndex!, anObject._id, index);
+    _lib._objc_msgSend_69(
+        _id, _lib._sel_insertObject_atIndex_1, anObject._id, index);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_removeLastObject;
   void removeLastObject() {
-    _sel_removeLastObject ??= _registerName(_lib, "removeLastObject");
-    _lib._objc_msgSend_0(_id, _sel_removeLastObject!);
+    _lib._objc_msgSend_0(_id, _lib._sel_removeLastObject1);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_removeObjectAtIndex;
   void removeObjectAtIndex(int index) {
-    _sel_removeObjectAtIndex ??= _registerName(_lib, "removeObjectAtIndex:");
-    _lib._objc_msgSend_63(_id, _sel_removeObjectAtIndex!, index);
+    _lib._objc_msgSend_63(_id, _lib._sel_removeObjectAtIndex_1, index);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_replaceObjectAtIndex_withObject;
   void replaceObjectAtIndex_withObject(int index, NSObject anObject) {
-    _sel_replaceObjectAtIndex_withObject ??=
-        _registerName(_lib, "replaceObjectAtIndex:withObject:");
     _lib._objc_msgSend_70(
-        _id, _sel_replaceObjectAtIndex_withObject!, index, anObject._id);
+        _id, _lib._sel_replaceObjectAtIndex_withObject_1, index, anObject._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_init;
   @override
   NSMutableArray init() {
-    _sel_init ??= _registerName(_lib, "init");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_init!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_init1);
     return NSMutableArray._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithCapacity;
   NSMutableArray initWithCapacity(int numItems) {
-    _sel_initWithCapacity ??= _registerName(_lib, "initWithCapacity:");
-    final _ret = _lib._objc_msgSend_48(_id, _sel_initWithCapacity!, numItems);
+    final _ret =
+        _lib._objc_msgSend_48(_id, _lib._sel_initWithCapacity_1, numItems);
     return NSMutableArray._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithCoder;
   @override
   NSMutableArray initWithCoder(NSObject coder) {
-    _sel_initWithCoder ??= _registerName(_lib, "initWithCoder:");
-    final _ret = _lib._objc_msgSend_13(_id, _sel_initWithCoder!, coder._id);
+    final _ret =
+        _lib._objc_msgSend_13(_id, _lib._sel_initWithCoder_1, coder._id);
     return NSMutableArray._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSMutableArray new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSMutableArray");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSMutableArray1, _lib._sel_new1);
     return NSMutableArray._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSMutableArray alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSMutableArray");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSMutableArray1, _lib._sel_alloc1);
     return NSMutableArray._(_ret, _lib);
   }
 }
@@ -3775,248 +3733,179 @@
   NSItemProvider._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSItemProvider castFrom<T extends _ObjCWrapper>(T other) {
     return NSItemProvider._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_init;
   @override
   NSItemProvider init() {
-    _sel_init ??= _registerName(_lib, "init");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_init!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_init1);
     return NSItemProvider._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>?
-      _sel_registerDataRepresentationForTypeIdentifier_visibility_loadHandler;
   void registerDataRepresentationForTypeIdentifier_visibility_loadHandler(
       NSObject typeIdentifier, int visibility, NSObject loadHandler) {
-    _sel_registerDataRepresentationForTypeIdentifier_visibility_loadHandler ??=
-        _registerName(_lib,
-            "registerDataRepresentationForTypeIdentifier:visibility:loadHandler:");
     _lib._objc_msgSend_71(
         _id,
-        _sel_registerDataRepresentationForTypeIdentifier_visibility_loadHandler!,
+        _lib._sel_registerDataRepresentationForTypeIdentifier_visibility_loadHandler_1,
         typeIdentifier._id,
         visibility,
         loadHandler._id);
   }
 
-  static ffi.Pointer<ObjCSel>?
-      _sel_registerFileRepresentationForTypeIdentifier_fileOptions_visibility_loadHandler;
   void
       registerFileRepresentationForTypeIdentifier_fileOptions_visibility_loadHandler(
           NSObject typeIdentifier,
           int fileOptions,
           int visibility,
           NSObject loadHandler) {
-    _sel_registerFileRepresentationForTypeIdentifier_fileOptions_visibility_loadHandler ??=
-        _registerName(_lib,
-            "registerFileRepresentationForTypeIdentifier:fileOptions:visibility:loadHandler:");
     _lib._objc_msgSend_72(
         _id,
-        _sel_registerFileRepresentationForTypeIdentifier_fileOptions_visibility_loadHandler!,
+        _lib._sel_registerFileRepresentationForTypeIdentifier_fileOptions_visibility_loadHandler_1,
         typeIdentifier._id,
         fileOptions,
         visibility,
         loadHandler._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_registeredTypeIdentifiers;
   NSObject get registeredTypeIdentifiers {
-    _sel_registeredTypeIdentifiers ??=
-        _registerName(_lib, "registeredTypeIdentifiers");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_registeredTypeIdentifiers!);
+    final _ret =
+        _lib._objc_msgSend_1(_id, _lib._sel_registeredTypeIdentifiers1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_hasItemConformingToTypeIdentifier;
   bool hasItemConformingToTypeIdentifier(NSObject typeIdentifier) {
-    _sel_hasItemConformingToTypeIdentifier ??=
-        _registerName(_lib, "hasItemConformingToTypeIdentifier:");
     return _lib._objc_msgSend_4(
-        _id, _sel_hasItemConformingToTypeIdentifier!, typeIdentifier._id);
+        _id, _lib._sel_hasItemConformingToTypeIdentifier_1, typeIdentifier._id);
   }
 
-  static ffi.Pointer<ObjCSel>?
-      _sel_hasRepresentationConformingToTypeIdentifier_fileOptions;
   bool hasRepresentationConformingToTypeIdentifier_fileOptions(
       NSObject typeIdentifier, int fileOptions) {
-    _sel_hasRepresentationConformingToTypeIdentifier_fileOptions ??=
-        _registerName(
-            _lib, "hasRepresentationConformingToTypeIdentifier:fileOptions:");
     return _lib._objc_msgSend_73(
         _id,
-        _sel_hasRepresentationConformingToTypeIdentifier_fileOptions!,
+        _lib._sel_hasRepresentationConformingToTypeIdentifier_fileOptions_1,
         typeIdentifier._id,
         fileOptions);
   }
 
-  static ffi.Pointer<ObjCSel>?
-      _sel_loadDataRepresentationForTypeIdentifier_completionHandler;
   NSProgress loadDataRepresentationForTypeIdentifier_completionHandler(
       NSObject typeIdentifier, NSObject completionHandler) {
-    _sel_loadDataRepresentationForTypeIdentifier_completionHandler ??=
-        _registerName(
-            _lib, "loadDataRepresentationForTypeIdentifier:completionHandler:");
     final _ret = _lib._objc_msgSend_74(
         _id,
-        _sel_loadDataRepresentationForTypeIdentifier_completionHandler!,
+        _lib._sel_loadDataRepresentationForTypeIdentifier_completionHandler_1,
         typeIdentifier._id,
         completionHandler._id);
     return NSProgress._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>?
-      _sel_loadFileRepresentationForTypeIdentifier_completionHandler;
   NSProgress loadFileRepresentationForTypeIdentifier_completionHandler(
       NSObject typeIdentifier, NSObject completionHandler) {
-    _sel_loadFileRepresentationForTypeIdentifier_completionHandler ??=
-        _registerName(
-            _lib, "loadFileRepresentationForTypeIdentifier:completionHandler:");
     final _ret = _lib._objc_msgSend_74(
         _id,
-        _sel_loadFileRepresentationForTypeIdentifier_completionHandler!,
+        _lib._sel_loadFileRepresentationForTypeIdentifier_completionHandler_1,
         typeIdentifier._id,
         completionHandler._id);
     return NSProgress._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>?
-      _sel_loadInPlaceFileRepresentationForTypeIdentifier_completionHandler;
   NSProgress loadInPlaceFileRepresentationForTypeIdentifier_completionHandler(
       NSObject typeIdentifier, NSObject completionHandler) {
-    _sel_loadInPlaceFileRepresentationForTypeIdentifier_completionHandler ??=
-        _registerName(_lib,
-            "loadInPlaceFileRepresentationForTypeIdentifier:completionHandler:");
     final _ret = _lib._objc_msgSend_74(
         _id,
-        _sel_loadInPlaceFileRepresentationForTypeIdentifier_completionHandler!,
+        _lib._sel_loadInPlaceFileRepresentationForTypeIdentifier_completionHandler_1,
         typeIdentifier._id,
         completionHandler._id);
     return NSProgress._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_suggestedName;
   NSObject get suggestedName {
-    _sel_suggestedName ??= _registerName(_lib, "suggestedName");
-    final _ret = _lib._objc_msgSend_1(_id, _sel_suggestedName!);
+    final _ret = _lib._objc_msgSend_1(_id, _lib._sel_suggestedName1);
     return NSObject._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_suggestedName1;
   set suggestedName(NSObject value) {
-    _sel_suggestedName1 ??= _registerName(_lib, "setSuggestedName:");
-    _lib._objc_msgSend_8(_id, _sel_suggestedName1!, value._id);
+    _lib._objc_msgSend_8(_id, _lib._sel_setSuggestedName_1, value._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithObject;
   NSItemProvider initWithObject(NSObject object) {
-    _sel_initWithObject ??= _registerName(_lib, "initWithObject:");
-    final _ret = _lib._objc_msgSend_13(_id, _sel_initWithObject!, object._id);
+    final _ret =
+        _lib._objc_msgSend_13(_id, _lib._sel_initWithObject_1, object._id);
     return NSItemProvider._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_registerObject_visibility;
   void registerObject_visibility(NSObject object, int visibility) {
-    _sel_registerObject_visibility ??=
-        _registerName(_lib, "registerObject:visibility:");
     _lib._objc_msgSend_75(
-        _id, _sel_registerObject_visibility!, object._id, visibility);
+        _id, _lib._sel_registerObject_visibility_1, object._id, visibility);
   }
 
-  static ffi.Pointer<ObjCSel>?
-      _sel_registerObjectOfClass_visibility_loadHandler;
   void registerObjectOfClass_visibility_loadHandler(
       NSObject aClass, int visibility, NSObject loadHandler) {
-    _sel_registerObjectOfClass_visibility_loadHandler ??=
-        _registerName(_lib, "registerObjectOfClass:visibility:loadHandler:");
     _lib._objc_msgSend_71(
         _id,
-        _sel_registerObjectOfClass_visibility_loadHandler!,
+        _lib._sel_registerObjectOfClass_visibility_loadHandler_1,
         aClass._id,
         visibility,
         loadHandler._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_canLoadObjectOfClass;
   bool canLoadObjectOfClass(NSObject aClass) {
-    _sel_canLoadObjectOfClass ??= _registerName(_lib, "canLoadObjectOfClass:");
-    return _lib._objc_msgSend_4(_id, _sel_canLoadObjectOfClass!, aClass._id);
+    return _lib._objc_msgSend_4(
+        _id, _lib._sel_canLoadObjectOfClass_1, aClass._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_loadObjectOfClass_completionHandler;
   NSProgress loadObjectOfClass_completionHandler(
       NSObject aClass, NSObject completionHandler) {
-    _sel_loadObjectOfClass_completionHandler ??=
-        _registerName(_lib, "loadObjectOfClass:completionHandler:");
     final _ret = _lib._objc_msgSend_74(
         _id,
-        _sel_loadObjectOfClass_completionHandler!,
+        _lib._sel_loadObjectOfClass_completionHandler_1,
         aClass._id,
         completionHandler._id);
     return NSProgress._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithItem_typeIdentifier;
   NSItemProvider initWithItem_typeIdentifier(
       NSObject item, NSObject typeIdentifier) {
-    _sel_initWithItem_typeIdentifier ??=
-        _registerName(_lib, "initWithItem:typeIdentifier:");
-    final _ret = _lib._objc_msgSend_76(
-        _id, _sel_initWithItem_typeIdentifier!, item._id, typeIdentifier._id);
+    final _ret = _lib._objc_msgSend_76(_id,
+        _lib._sel_initWithItem_typeIdentifier_1, item._id, typeIdentifier._id);
     return NSItemProvider._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_initWithContentsOfURL;
   NSItemProvider initWithContentsOfURL(NSObject fileURL) {
-    _sel_initWithContentsOfURL ??=
-        _registerName(_lib, "initWithContentsOfURL:");
-    final _ret =
-        _lib._objc_msgSend_13(_id, _sel_initWithContentsOfURL!, fileURL._id);
+    final _ret = _lib._objc_msgSend_13(
+        _id, _lib._sel_initWithContentsOfURL_1, fileURL._id);
     return NSItemProvider._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_registerItemForTypeIdentifier_loadHandler;
   void registerItemForTypeIdentifier_loadHandler(
       NSObject typeIdentifier, NSItemProviderLoadHandler loadHandler) {
-    _sel_registerItemForTypeIdentifier_loadHandler ??=
-        _registerName(_lib, "registerItemForTypeIdentifier:loadHandler:");
-    _lib._objc_msgSend_77(_id, _sel_registerItemForTypeIdentifier_loadHandler!,
-        typeIdentifier._id, loadHandler);
+    _lib._objc_msgSend_77(
+        _id,
+        _lib._sel_registerItemForTypeIdentifier_loadHandler_1,
+        typeIdentifier._id,
+        loadHandler);
   }
 
-  static ffi.Pointer<ObjCSel>?
-      _sel_loadItemForTypeIdentifier_options_completionHandler;
   void loadItemForTypeIdentifier_options_completionHandler(
       NSObject typeIdentifier,
       NSObject options,
       NSItemProviderCompletionHandler completionHandler) {
-    _sel_loadItemForTypeIdentifier_options_completionHandler ??= _registerName(
-        _lib, "loadItemForTypeIdentifier:options:completionHandler:");
     _lib._objc_msgSend_78(
         _id,
-        _sel_loadItemForTypeIdentifier_options_completionHandler!,
+        _lib._sel_loadItemForTypeIdentifier_options_completionHandler_1,
         typeIdentifier._id,
         options._id,
         completionHandler);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSItemProvider new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSItemProvider");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSItemProvider1, _lib._sel_new1);
     return NSItemProvider._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSItemProvider alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSItemProvider");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSItemProvider1, _lib._sel_alloc1);
     return NSItemProvider._(_ret, _lib);
   }
 }
@@ -4025,8 +3914,6 @@
   NSProgress._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSProgress castFrom<T extends _ObjCWrapper>(T other) {
     return NSProgress._(other._id, other._lib);
   }
@@ -4079,44 +3966,31 @@
   NSMutableString._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSMutableString castFrom<T extends _ObjCWrapper>(T other) {
     return NSMutableString._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_replaceCharactersInRange_withString;
   void replaceCharactersInRange_withString(NSRange range, NSObject aString) {
-    _sel_replaceCharactersInRange_withString ??=
-        _registerName(_lib, "replaceCharactersInRange:withString:");
-    _lib._objc_msgSend_79(
-        _id, _sel_replaceCharactersInRange_withString!, range, aString._id);
+    _lib._objc_msgSend_79(_id, _lib._sel_replaceCharactersInRange_withString_1,
+        range, aString._id);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_stringWithCString_encoding;
   static NSString stringWithCString_encoding(
       StringTestObjCLibrary _lib, ffi.Pointer<pkg_ffi.Char> cString, int enc) {
-    _class ??= _getClass(_lib, "NSMutableString");
-    _sel_stringWithCString_encoding ??=
-        _registerName(_lib, "stringWithCString:encoding:");
-    final _ret = _lib._objc_msgSend_14(
-        _class!, _sel_stringWithCString_encoding!, cString, enc);
+    final _ret = _lib._objc_msgSend_14(_lib._class_NSMutableString1,
+        _lib._sel_stringWithCString_encoding_1, cString, enc);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSMutableString new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSMutableString");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSMutableString1, _lib._sel_new1);
     return NSMutableString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSMutableString alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSMutableString");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSMutableString1, _lib._sel_alloc1);
     return NSMutableString._(_ret, _lib);
   }
 }
@@ -4127,36 +4001,26 @@
   NSSimpleCString._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSSimpleCString castFrom<T extends _ObjCWrapper>(T other) {
     return NSSimpleCString._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_stringWithCString_encoding;
   static NSString stringWithCString_encoding(
       StringTestObjCLibrary _lib, ffi.Pointer<pkg_ffi.Char> cString, int enc) {
-    _class ??= _getClass(_lib, "NSSimpleCString");
-    _sel_stringWithCString_encoding ??=
-        _registerName(_lib, "stringWithCString:encoding:");
-    final _ret = _lib._objc_msgSend_14(
-        _class!, _sel_stringWithCString_encoding!, cString, enc);
+    final _ret = _lib._objc_msgSend_14(_lib._class_NSSimpleCString1,
+        _lib._sel_stringWithCString_encoding_1, cString, enc);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSSimpleCString new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSSimpleCString");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSSimpleCString1, _lib._sel_new1);
     return NSSimpleCString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSSimpleCString alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSSimpleCString");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSSimpleCString1, _lib._sel_alloc1);
     return NSSimpleCString._(_ret, _lib);
   }
 }
@@ -4165,36 +4029,26 @@
   NSConstantString._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static NSConstantString castFrom<T extends _ObjCWrapper>(T other) {
     return NSConstantString._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_stringWithCString_encoding;
   static NSString stringWithCString_encoding(
       StringTestObjCLibrary _lib, ffi.Pointer<pkg_ffi.Char> cString, int enc) {
-    _class ??= _getClass(_lib, "NSConstantString");
-    _sel_stringWithCString_encoding ??=
-        _registerName(_lib, "stringWithCString:encoding:");
-    final _ret = _lib._objc_msgSend_14(
-        _class!, _sel_stringWithCString_encoding!, cString, enc);
+    final _ret = _lib._objc_msgSend_14(_lib._class_NSConstantString1,
+        _lib._sel_stringWithCString_encoding_1, cString, enc);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static NSConstantString new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSConstantString");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSConstantString1, _lib._sel_new1);
     return NSConstantString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static NSConstantString alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "NSConstantString");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_NSConstantString1, _lib._sel_alloc1);
     return NSConstantString._(_ret, _lib);
   }
 }
@@ -4203,35 +4057,25 @@
   StringUtil._(ffi.Pointer<ObjCObject> id, StringTestObjCLibrary lib)
       : super._(id, lib);
 
-  static ffi.Pointer<ObjCObject>? _class;
-
   static StringUtil castFrom<T extends _ObjCWrapper>(T other) {
     return StringUtil._(other._id, other._lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_strConcat_with;
   static NSString strConcat_with(
       StringTestObjCLibrary _lib, NSObject a, NSObject b) {
-    _class ??= _getClass(_lib, "StringUtil");
-    _sel_strConcat_with ??= _registerName(_lib, "strConcat:with:");
-    final _ret =
-        _lib._objc_msgSend_80(_class!, _sel_strConcat_with!, a._id, b._id);
+    final _ret = _lib._objc_msgSend_80(
+        _lib._class_StringUtil1, _lib._sel_strConcat_with_1, a._id, b._id);
     return NSString._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_new1;
   static StringUtil new1(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "StringUtil");
-    _sel_new1 ??= _registerName(_lib, "new");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_new1!);
+    final _ret = _lib._objc_msgSend_1(_lib._class_StringUtil1, _lib._sel_new1);
     return StringUtil._(_ret, _lib);
   }
 
-  static ffi.Pointer<ObjCSel>? _sel_alloc;
   static StringUtil alloc(StringTestObjCLibrary _lib) {
-    _class ??= _getClass(_lib, "StringUtil");
-    _sel_alloc ??= _registerName(_lib, "alloc");
-    final _ret = _lib._objc_msgSend_1(_class!, _sel_alloc!);
+    final _ret =
+        _lib._objc_msgSend_1(_lib._class_StringUtil1, _lib._sel_alloc1);
     return StringUtil._(_ret, _lib);
   }
 }