关键字&&属性

#import

导入接口,确保同一个文件永远不会被包含多次;比#include的好处就是不会引起重复包含(交叉编译)

#include

导入接口

@class

一般用于头文件中需要声明该类的某个实例变量的时候用到。

@interface

类接口的声明以编译器指令开头 @interface 并以 指令结束 @en􏰀d。

@property

声明属性

+     - 

+ 类对象,类方法可以使用的方法的名称,前面加 一个加号 +

-  类实例可以使用的方法,实例方法,标有减号 -

@implementation

类接口的实现

@synthesize

如果不在@implementation块中提供属性,则使用 该指令告诉编译器它应该为属性合成setter和/或 getter方法。@sy􏰀thesize如果没有声明,该指令 还会合成一个适当的实例变量。 无论是否指定实例变量的名称,该@sy􏰀thesize指 令只能使用当前类的实例变量,而不能使用超 类。

@dynamic

使用@dynamic关键字告诉编译器您将通过直接提 供方法实现或在运行时使用其他机制(如动态加 载代码或动态方法解析)来实现属性隐含的API契 约。它会抑制编译器在无法找到合适的实现时会 产生的警告。只有在知道方法在运行时可用时才 应使用它。

要点:如果未指定@sy􏰀thesize或@dynamic为特定属性 指定,则必须为该属性提供getter和setter(或者 只是readonly属性的getter )方法实现。如果不这 样做,编译器会生成警告。

@private

实例变量 只能在声明它的类中访问。

@protected

实例变量可以在声明它的类中以及继承它的类中 访问。没有显式范围指令的所有实例变量都有 @protected范围。

@public

实例变量随处可访问。

@package

实例变量可以在包内部访问,一个项目一定是在同一个包下。

@protocol

协议名

@required

必须实现的协议方法(默认)

@optional

将协议方法标记为可选

属性

访问者方法名称

getter=getterName

指定属性的get访问器的名称。getter必须返回与 属性类型匹配的类型,并且不带参数。

setter=setterName

指定属性的set访问器的名称。setter方法必须采用 与属性类型匹配的类型的单个参数,并且必须返 回v􏰄id。如果指定属性read􏰄􏰀􏰁y并且还指定了setter setter=,则会收到编译器警告。 通常,您应指定符合键值编码的访问者方法名称 (请参阅键值编码编程指南) - 使用getter装饰器 的常见原因是遵守布尔值的isPr􏰄􏰃ertyNa􏰂e约定。

可写

readwrite

指示应将该属性视为读/写。此属性是默认值。 @implementation􏰄􏰀块中需要getter和setter方法。 如果@sy􏰀thesize在实现块中使用该指令,则会合 成getter和setter方法。

此属性是默认值, 会自动为你生成存取器。

readonly

表示该属性是只读的。 如果指定readonly,则@implementation􏰄􏰀块中只需 要getter方法。如果@sy􏰀thesize在实现块中使用 该指令,则仅合成getter方法。此外,如果您尝试 使用点语法分配值,则会出现编译器错误。

只生成getter不会有setter方法。

set的语义学

strong

强引用,也是我们通常说的引用,其存亡直接决定了所指向对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示在列表中,则此对象会被从内存中释放。

strongretain功能相似;

weak

弱引用,不决定对象的存亡。即使一个对象被持有无数个弱引用,只要没有强引用指向它,那么还是会被清除。 

weakassign相似,只是当对象消失后weak会自动把指针变为nil;

(OS X v10.6和iOS 4不支持弱属性;请assig􏰀改 用。)

assign

默认类型,setter方法直接赋值,不进行任何retain操作,不改变引用计数。一般用来处理基本数据类型。例如NSI􏰀teger和 CGRect。

retain

释放旧的对象(release),将旧对象的值赋给新对象,再令新对象引用计数为1。

指定retai􏰀n在赋值时应在对象上调用。 先前的值会发送一条re􏰁ease消息。

在OS X v10.6及更高版本中,您可以使用该 __attribute__关键字指定应将Co􏰄re F􏰄oun􏰀dation􏰄􏰀属性 视为用于内存管理的Objective-C对象: 

@􏰃prop􏰄􏰃erty(retai􏰀n􏰀)__ attribute __ ((NSObject))CFDicti􏰄􏰀onaryRef 􏰂myDicti􏰄􏰀onary;

copy

与retain处理流程一样,先对旧值release,再copy出新的对象,retainCount为1.为了减少对上下文的依赖而引入的机制。我理解为内容的拷贝,向内存申请一块空间,把原来的对象内容赋给它,令其引用计数为1。对copy属性要特别注意:被定义有copy属性的对象必须要符合NSCopying协议,必须实现- (id)copyWithZone:(NSZone *)zone方法

原子性

nonatomic

指定访问者是非原子的。默认情况下,访问器是原子的。

-----------------------------------------

如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,可以提高效率。

当一个变量声明为nonatomic时,意味着多个线程可以同时对其进行访问;它是非线程安全型,访问速度快;当两个不同的线程对其访问时,容易失控。

atomic

默认情况下,属性是合成访问器提供对多线程环境中属性的强大访问 - 也就是说,无论其他线程 同时执行什么,始终完全检索或设置从getter返回 的值或通过setter设置的值。如果指定strong, copy或者retain􏰀未指定nonatomic,则在引用计数环境中, 对象属性的合成get访问器使用锁并保留并自动释放返回的值

- 实现将类似于以下内容:

[_内锁]; //使用对象级锁定锁定

id resu􏰁t = [[retai􏰀 retain􏰀] aut􏰄re􏰁ease];

[_内部解锁];

返回结果; 如果指定􏰀􏰄􏰀atomic,则对象属性的合成访问器只是直接返回值。

-----------------------------------------

这个属性是为了保证程序在多线程情况,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步问题。

当一个变量声明为atomic时,意味着在多线程中只能有一个线程能对它进行访问;该变量为线程安全型,但是会影响访问速度;在非ARC编译环境下,需要设置访问锁来保证对该变量进行正确的get/set加了atomic,setter函数会变成下面这样:

if (property != newValue) {

    [property release];  

    property = [newValue retain];  

}


@encode

@encode为编译器宏,它可以将类型转换为响应 的字符串。

id

可以调用任何对象方法,不能进行编译检测(运 行时容易找不到方法)。 id是指向 Objective-C类对象的指针,它可以声明为任何类 对象的指针,当在Objective-C中应用id时,编译 器会假定你知道,id指向哪个类的对象。与vo􏰄id是不同的是,vo􏰄id编译器不知道也不假定指向任何类型的指针。

nil􏰁 

定义为一个常量,若是一个指针的值为􏰀nil􏰁,代表这个指针没有指向任何对象。

self

在Objective-C中,关键字se􏰁f与c++中this是同一 概念,就是类对象自身的地址,经由过程self可以 调用本身的实例变量和办法

Super

当子类须要调用父类的办法时,会用到Super关键 字. Super指向的是父类的指针,子类重写父类的 办法时,调用父类的办法是一个非常好的习惯。 因为当我们不知道父类在该办法中实现的功能 时,若是不调用父类的办法,有可能我们重写的 办法会落空该功能,这是我们不想看到的景象。

NSNull

NSNull是没有的意思,若是一个字典的值为 NSNull􏰁􏰁,那申明与该值对应的Key是没有值的,例 如Key为address,声明与address对应的是值是没有。

instancetype

自动识别当前类的对象 x􏰄code 5

__kindof

表示相当于当前类或者他的子类

参考文档:

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocDefiningClasses.html#//apple_ref/doc/uid/TP30001163-CH12-SW1

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

推荐阅读更多精彩内容