Objective C - 返回NSObject和return objc_getAssociatedObject()之间的区别

Sot*_*ost 0 objective-c objective-c-runtime

我有下一个代码:

// UITextField+Navigation.h
@interface UITextField (Navigation)

@property (weak, nonatomic) UIControl *nextUIControl;

@end

//UITextField+Navigation.m
@implementation UITextField (Navigation)

- (UIControl *) nextUIControl {
    return objc_getAssociatedObject(self, &defaultHashKey);
}

- (void) setNextUIControl:(UIControl *)nextUIControl {
    objc_setAssociatedObject(self, &defaultHashKey, nextUIControl, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

@end
Run Code Online (Sandbox Code Playgroud)

有什么区别:

return objc_getAssociatedObject(self, &defaultHashKey);
Run Code Online (Sandbox Code Playgroud)

return self.nextUIControl;
Run Code Online (Sandbox Code Playgroud)

我试过两种方式,第二种进入无限循环......为什么?也许这是一个明显的答案,但我是初学者^^'

提前致谢.

Leo*_*ica 5

self.nextUIControl是点符号[self nextUIControl].事实上,事实上,你正在呼唤无休止的递归.

您的代码演示了在类类别中定义的属性.由于类别不能引入其他实例变量,因此关联对象用于设置和获取.

  • @Soto_iGhost号.他们登陆你的案子.通常,当在其主实现中的类中定义属性时,存在一个实例变量(也称为`_propertyName`),这是存储该值的位置.但由于这是一个类类别,因此该对象必须保存在外部存储中,这就是关联模型. (3认同)