美文网首页
runtime —— message.h

runtime —— message.h

作者: 李潇南 | 来源:发表于2017-12-16 18:10 被阅读29次
    /// Specifies the superclass of an instance. 
    struct objc_super {
    
        __unsafe_unretained _Nonnull id receiver;
    
        __unsafe_unretained _Nonnull Class class;
    
        __unsafe_unretained _Nonnull Class super_class;
    
    };
    
    #if !OBJC_OLD_DISPATCH_PROTOTYPES
    OBJC_EXPORT void
    objc_msgSend(void /* id self, SEL op, ... */ )
        OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
    
    
    OBJC_EXPORT void
    objc_msgSendSuper(void /* struct objc_super *super, SEL op, ... */ )
        OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
    
    
    OBJC_EXPORT id _Nullable
    objc_msgSend(id _Nullable self, SEL _Nonnull op, ...)
        OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
    
    
    OBJC_EXPORT id _Nullable
    objc_msgSendSuper(struct objc_super * _Nonnull super, SEL _Nonnull op, ...)
        OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
    
    #if !OBJC_OLD_DISPATCH_PROTOTYPES
    OBJC_EXPORT void
    objc_msgSend_stret(void /* id self, SEL op, ... */ )
        OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0)
        OBJC_ARM64_UNAVAILABLE;
    
    
    OBJC_EXPORT void
    objc_msgSendSuper_stret(void /* struct objc_super *super, SEL op, ... */ )
        OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0)
        OBJC_ARM64_UNAVAILABLE;
    #else
    
    
    OBJC_EXPORT void
    objc_msgSend_stret(id _Nullable self, SEL _Nonnull op, ...)
        OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0)
        OBJC_ARM64_UNAVAILABLE;
    
    
    
    OBJC_EXPORT void
    objc_msgSendSuper_stret(struct objc_super * _Nonnull super,
                            SEL _Nonnull op, ...)
        OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0)
        OBJC_ARM64_UNAVAILABLE;
    
    
    # if defined(__i386__)
    
    OBJC_EXPORT void
    objc_msgSend_fpret(void /* id self, SEL op, ... */ )
        OBJC_AVAILABLE(10.4, 2.0, 9.0, 1.0, 2.0);
    
    # elif defined(__x86_64__)
    
    
    OBJC_EXPORT void
    objc_msgSend_fpret(void /* id self, SEL op, ... */ )
        OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0);
    
    OBJC_EXPORT void
    objc_msgSend_fp2ret(void /* id self, SEL op, ... */ )
        OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0);
    
    
    OBJC_EXPORT double
    objc_msgSend_fpret(id _Nullable self, SEL _Nonnull op, ...)
        OBJC_AVAILABLE(10.4, 2.0, 9.0, 1.0, 2.0);
    
    OBJC_EXPORT long double
    objc_msgSend_fpret(id _Nullable self, SEL _Nonnull op, ...)
        OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0);
    
    #  if __STDC_VERSION__ >= 199901L
    OBJC_EXPORT _Complex long double
    objc_msgSend_fp2ret(id _Nullable self, SEL _Nonnull op, ...)
        OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0);
    #  else
    OBJC_EXPORT void objc_msgSend_fp2ret(id _Nullable self, SEL _Nonnull op, ...)
        OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0);
    #  endif
    
    
    #if !OBJC_OLD_DISPATCH_PROTOTYPES
    OBJC_EXPORT void
    method_invoke(void /* id receiver, Method m, ... */ ) 
        OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0);
    
    OBJC_EXPORT void
    method_invoke_stret(void /* id receiver, Method m, ... */ ) 
        OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0)
        OBJC_ARM64_UNAVAILABLE;
    #else
    OBJC_EXPORT id _Nullable
    method_invoke(id _Nullable receiver, Method _Nonnull m, ...) 
        OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0);
    
    OBJC_EXPORT void
    method_invoke_stret(id _Nullable receiver, Method _Nonnull m, ...) 
        OBJC_AVAILABLE(10.5, 2.0, 9.0, 1.0, 2.0)
        OBJC_ARM64_UNAVAILABLE;
    #endif
    
    
    
    #if !OBJC_OLD_DISPATCH_PROTOTYPES
    OBJC_EXPORT void
    _objc_msgForward(void /* id receiver, SEL sel, ... */ ) 
        OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
    
    OBJC_EXPORT void
    _objc_msgForward_stret(void /* id receiver, SEL sel, ... */ ) 
        OBJC_AVAILABLE(10.6, 3.0, 9.0, 1.0, 2.0)
        OBJC_ARM64_UNAVAILABLE;
    #else
    OBJC_EXPORT id _Nullable
    _objc_msgForward(id _Nonnull receiver, SEL _Nonnull sel, ...) 
        OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0, 2.0);
    
    OBJC_EXPORT void
    _objc_msgForward_stret(id _Nonnull receiver, SEL _Nonnull sel, ...) 
        OBJC_AVAILABLE(10.6, 3.0, 9.0, 1.0, 2.0)
        OBJC_ARM64_UNAVAILABLE;
    
    typedef void* marg_list;
    
    OBJC_EXPORT id _Nullable
    objc_msgSendv(id _Nullable self, SEL _Nonnull op, size_t arg_size,
                  marg_list _Nonnull arg_frame)
        OBJC2_UNAVAILABLE;
    
    OBJC_EXPORT void
    objc_msgSendv_stret(void * _Nonnull stretAddr, id _Nullable self,
                        SEL _Nonnull op, size_t arg_size,
                        marg_list _Nullable arg_frame)
        OBJC2_UNAVAILABLE;
    /* Note that objc_msgSendv_stret() does not return a structure type, 
     * and should not be cast to do so. This is unlike objc_msgSend_stret() 
     * and objc_msgSendSuper_stret().
     */
    #if defined(__i386__)
    OBJC_EXPORT double
    objc_msgSendv_fpret(id _Nullable self, SEL _Nonnull op,
                        unsigned arg_size, marg_list _Nullable arg_frame)
        OBJC2_UNAVAILABLE;
    #endif
    
    
    

    相关文章

      网友评论

          本文标题:runtime —— message.h

          本文链接:https://www.haomeiwen.com/subject/jsxewxtx.html