iOS開發-在分類(Category)文件中添加屬性,在分類中添加屬性時要註意,在分類頭文件中添加的屬性不會自動生成setter和getter,需自己以runtime方法實現,並且不能以下劃線+屬性名的方式訪問。
例如我們在分類頭文件中寫這麼一個屬性:
@property (nonatomic, strong) ClassName *propertyName;
這個屬性這時並不存在 getter 和 setter方法,需要在.m文件中自己實現
static const void *ClassNameKey = &ClassNameKey; //然後自己實現getset方法 - (ClassName *)propertyName { return objc_getAssociatedObject(self, ClassNameKey); } - (void)setPropertyName:(ClassName *)propertyName { objc_setAssociatedObject(self, ClassNameKey, propertyName, OBJC_ASSOCIATION_RETAIN_NONATOMIC); }
另外要註意,在分類文件中無法添加全局變量,如果硬添加會編譯報錯,如圖:
因此,如果有人問:如果在分類中添加一個與原類中屬性名稱相同的全局變量並在方法中賦值,原類屬性的值是否發生變化,這時分兩種情況,要麼他是在考察你是否知道分類中無法添加全局變量,要麼他是個逗逼。