Skip to content

Why reimplement aspect_swizzleClassInPlace method in RFAspects.m? #4

@hawk0620

Description

@hawk0620

Hello, Can I ask you why choose AssociatedObject instead of singleton NSMutableSet in RFAspects.m? Is it for the memory optimization? Thank you

static Class aspect_swizzleClassInPlace(Class klass) {
    NSCParameterAssert(klass);
//    NSString *className = NSStringFromClass(klass);
//
//    _aspect_modifySwizzledClasses(^(NSMutableSet *swizzledClasses) {
//        if (![swizzledClasses containsObject:className]) {
//            aspect_swizzleForwardInvocation(klass);
//            [swizzledClasses addObject:className];
//        }
//    });
    NSNumber *hasBeenHooked = objc_getAssociatedObject(klass, kClassHasBeenHookedKey);
    if (!hasBeenHooked.boolValue) {
        aspect_swizzleForwardInvocation(klass);
        objc_setAssociatedObject(klass, kClassHasBeenHookedKey, @YES, OBJC_ASSOCIATION_RETAIN);
    }
    return klass;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions