__attribute__ 方法名、属性标注

1. 这个是个啥

在大家做iOS开发的时候,有没有发现,你在调用系统的方法的时候,发现有些方法,会提示你过期了,或者这个方法在当前系统下不可用。我感觉很有用,就翻阅了相关文档,查看了相关文档,发现用 “attribute”标注就可以实现。

2. 关键字说明

// 功能开头
__attribute__(())
// 指定初始化方法
NS_DESIGNATED_INITIALIZER
// 标注过期
deprecated
// 标注平台
ios
// 标注开始使用版本
introduced
// 标注过期版本
deprecated
// 提示信息
message
// 标注当前方法不可用
availability
// 标注不可用版本
obsoleted

3. 继承相关的

3.1 restricted

在一个类申明的时候使用,表示该类不可被继承。

示例

// 标注该类不可被继承 相当于 java 中的 final 关键字
__attribute__((objc_subclassing_restricted))
@interface HObj : NSObject
@end

子类继承,编译的时候,会提示如下错误
屏幕快照 2018-08-30 上午11.40.57.png

3.2 INITIALIZER

初始化方法申明的时候使用,表示必须用该方法进行初始化。

示例

// 标注该类在初始化对象时,必须调用super的INITIALIZER的方法初始化
// 该类的其他初始化方法,在内部,必须调用该方法进行初始化
-(instancetype)initWithName:(NSString *)name NS_DESIGNATED_INITIALIZER;

如果其他初始化方法内部为调用 【INITIALIZER】标注的方法进行初始化,编译的时候就会报如下警告

屏幕快照 2018-08-30 下午1.36.41.png

3.3 objc_requires_super

在方法中标注,表示子类重写方法时,必须调用[super xxx]

示例

// 指定子类重写的时候,必须要调用
// [super initWithAge:age]
-(instancetype)initWithAge:(int)age __attribute__((objc_requires_super));

如果子类重写父类方法时,未调用[super xxx],就会报如下警告

屏幕快照 2018-08-30 下午3.03.03.png

4. deprecated 过期标注

主要标注一个方法在什么情况下过期了

示例

// deprecated 标注过期
-(void)method1 __attribute__((deprecated("过期了")));
-(void)method3 DEPRECATED_ATTRIBUTE;
// deprecated 标注过期 [7.0,11.0]可用
-(void)method2 NS_DEPRECATED_IOS(7_0,11_0,"看看我有没有过期");
-(void)method7 CF_DEPRECATED_IOS(7_0, 11_0,"你怎么傻乎乎的");
// ios 标注平台
// introduced 标注开始使用版本
// deprecated 标注过期版本
// message 提示信息
-(void)method8 __attribute__((availability(ios,introduced=3_0,deprecated=7_0,message="你怎么傻biubiu的")));

标注的方法,调用的时候,会报如下警告

屏幕快照 2018-08-30 下午1.40.45.png

5. UNAVAILABLE 不可用标注

主要标注一个方法不可用

示例

// NS_UNAVAILABLE 标注不可用
-(void)method4 NS_UNAVAILABLE;
-(void)method5 UNAVAILABLE_ATTRIBUTE;
-(void)method6 __attribute__((unavailable("不能用了")));
// ios 标注平台
// unavailable 标注不可用
-(void)method9 __attribute__((availability(ios,unavailable,message="你怎么傻缺缺的")));
// obsoleted 标注不可用版本号
-(void)method10 __attribute__((availability(ios,introduced=3_0,deprecated=7_0,obsoleted=8_0,message="你怎么傻呵呵的")));

标注的方法,调用的时候,会报如下警告

屏幕快照 2018-08-30 下午1.40.45 2.png

6. cleanup 生命周期

该标注,主要用于监听一个对象delloc的时机,被释放的时候,可以指定调用一个方法

// 准备两个函数,用于监听对象背释放的时候的时机
void die(id *obj){
    NSLog(@"%s %@",__func__,*obj);
}
void die4block(void(^*block)(void)){
    NSLog(@"%s %@",__func__,*block);
}
// 使用
// obj挂的时候,会调用die方法
HObj *obj __attribute__((cleanup(die))) = [[HObj alloc] initWithName:@"name”];
// block挂的时候,会调用die4block方法
void(^block)(void) __attribute__((cleanup(die4block))) = ^() {};

7. overloadable 方法重载

方法重载

__attribute__((overloadable)) int add(int a,int b){
    return a+b;
}
__attribute__((overloadable)) double add(double a,double b){
    return a+b;
}
int main(int argc, char * argv[]) {
    @autoreleasepool {
        NSLog(@"%d",add(1, 2));
        NSLog(@"%lf",add(1.1, 2.2));
    }
}

结果

2018-08-30 16:25:39.008893+0800 bb[6839:878586] 3
2018-08-30 16:25:39.009314+0800 bb[6839:878586] 3.300000
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容