带你看看Objective-C的精髓

1:接口与实现

  • @interface...@end
  • @implementation...@end
  • @class

接口(头文件)

实现文件

向前引用

注:类别通过增加新的类和实例方法来扩展现有类的行为。作为惯例,类别被定义在它们自己的.{h,m}文件里,

2:实例变量可视性

  • @public
  • @package
  • @protected
  • @private

@public:实例变量可使用符号 person->age = 32" 被直接读取。

@package:实例变量是公开的,除非它被指定在框架外(仅适用64位架构)

@protected:实例变量仅可由其类和其衍生类访问

@private:实例变量仅可由其类访问

3:属性

  • @property
  • @synthesize
  • @dynamic

关于属性值得注意的一点是,从 Xcode 4.4 开始,我们再也不需要明确的合成属性了。在 @interface中被声明的属性在 implementation 中被自动的合成(与前面有下划线的ivar名称一起,比如@synthesize propertyName = _propertyName )。

@dynamic 是相对于 @synthesize 的,它们用样用于修饰 @property,用于生成对应的的 getter 和 setter 方法。但是 @ dynamic 表示这个成员变量的 getter 和 setter 方法并不是直接由编译器生成,而是手工生成或者运行时生成。

4:协议

  • @protocol
  • @required
  • @optional

定义了一组将在服从该协议的类中实现的方法,就好像它们被加入到那个类的接口中一样。

你可以通过指定方法为必须和可选来更深入的定制一个协议。可选的方法在接口上存根,以便能被 Xcode 自动完成但如果方法没有被实现又不生成警告。协议方法默认是必须的

5:异常处理

  • @try
  • @catch
  • @finally
  • @throw

Objective-C 主要通过 NSError 来沟通意想不到的异常状态。而其他语言使用异常处理,Objective-C 则将异常以及程序员错误降级为真正的异常的行为。

6:对象常量

  • @""
  • @42@3.14@YES@'Z'
  • @[]
  • @{}
  • @()

@"":返回一个由引号内Unicode内容初始化的 NSString 对象。

@42@3.14@YES@'Z':返回一个由相关类构造初始化的 NSNumber 对象,比如 @42 →[NSNumber numberWithInteger:42],或者 @YES → [NSNumber numberWithBool:YES]。支持使用后缀进一步指定类型,如 @42U → [NSNumber numberWithUnsignedInt:42U]

@[]:返回一个由冒号分隔的对象列表作为内容的 NSArray 对象。比如,@[@"A", @NO, @2.718] → [NSArray arrayWithObjects:@"A", @NO, @2.718, nil] (注意在数组常量中结束标记nil是不需要的)。

@{}:返回一个由特定键-值对初始化作为内容的NSDictionary对象,格式:@{@"someKey" : @"theValue"}

@():动态评估封装的表达,并返回基于其值的合适的对象常量(比如,const char*返回NSStringint返回NSNumber,等等。)。这也是使用数字常量和枚举值的指定方式。

7:Objective-C 常量

  • @selector()
  • @protocol()

@selector():返回一个指向有特定名称的选择器的 SEL 指针。用于类似 -performSelector:withObject: 的方法。

@protocol():返回一个指向有特定名称的协议的 Protocol * 指针。用于类似 -conformsToProtocol: 的方法。

8:C 常量

  • @encode()
  • @defs()

@encode():返回一个类型的类型编码。这个类型值可以用于 NSCoder -encodeValueOfObjCType:at 中的第一个参数编码。

@defs():返回一个 Objective-C 类的布局。比如,定义一个与 NSObject 有相同布局的 struct,你只需要这样:

9:优化

  • @autoreleasepool{}
  • @synchronized{}

@autoreleasepool{}:如果你的代码中包含创建大量临时对象的紧密的循环,你可以通过 @autorelease 更加积极的释放这些寿命短暂,局部范围内的对象来达到优化。@autoreleasepool 替换并且改进了旧的又慢又不能在ARC中使用的NSAutoreleasePool

@synchronized(){}:这个指令为在一特定的环境中(通常是 self )确保安全执行某一特定块提供了一个便捷的方法。这种情况的死锁很昂贵,所以,对于针对特定级别的线程安全的类来说,建议使用专用的 NSLock 属性或者使用如OSAtomicCompareAndSwap32(3) 的底层的死锁函数。

10:兼容

  • @compatibility_alias

允许现有类有不同的名称作为别名。

iOS开发——项目实战总结&带你看看Objective-C的精髓的更多相关文章

  1. iOS开发项目实战——Swift实现图片轮播与浏览

    近期開始开发一个新的iOS应用,自己决定使用Swift.进行了几天之后,发现了一个非常严峻的问题.那就是无论是书籍,还是网络资源,关于Swift的实在是太少了,随便一搜全都是OC实现某某某功能.就算是 ...

  2. iOS开发项目实战——Swift实现ScrollView滚动栏功能

    手机作为一个小屏设备,须要显示的信息往往无法在一个屏幕上显示,此时就须要使用到滚动栏,当然除了像TableView这样能够自带滚动功能的. 假设一个界面上View较多,那就必须要使用到ScrollVi ...

  3. iOS开发——项目实战总结&经典错误一

    经典错误一 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7, VA 运行报错 出现的原因:armv7s ...

  4. IOS开发-项目实战-点赞功能的实现

    实现思路: 1.每一条新闻就是一个cell,在cell上添加点赞按钮. 2.让cell的控制器成为自定义cell的代理,将点击了哪一个cell放在代理方法中传出去. 3.并将这条新闻的ID和当前用户的 ...

  5. iOS开发——项目实战总结&Block使用注意点浅析

    Block使用注意点浅析 1.在使用block前需要对block指针做判空处理. 不判空直接使用,一旦指针为空直接产生崩溃. if (!self.isOnlyNet) { if (succBlock ...

  6. iOS开发——项目实战总结&关于随机量

    关于随机量 rand 是一个标准的 C 函数. random 是定义为 POSIX 标准的一部分. arc4random 是在 BSD 和派生平台. 随机数 arc4random_uniform(N) ...

  7. iOS开发——项目实战总结&数据持久化分析

    数据持久化分析 plist文件(属性列表) preference(偏好设置) NSKeyedArchiver(归档) SQLite 3 CoreData 当存储大块数据时你会怎么做? 你有很多选择,比 ...

  8. iOS开发——项目实战OC篇&类QQ黏性按钮(封装)

    类QQ粘性按钮(封装) 那个,先来说说原理吧: 这里原理就是,在界面设置两个控件一个按钮在上面,一个View在下面(同样大小),当我们拖动按钮的时候显示下面的View,view不移动,但是会根据按钮中 ...

  9. C# Xamarin移动开发项目实战篇

    一.课程介绍 在前面阿笨的<C# Xamarin移动开发基础进修篇>课程中,大家已经熟悉和了解了Xamarin移动App开发的基础知识和原理.本次分享课<C# Xamarin移动开发 ...

随机推荐

  1. Magicodes.WeiChat——多租户的设计与实现

    概要 多租户(Multi Tenancy/Tenant)是一种软件架构,其定义是:在一台服务器上运行单个应用实例,它为多个租户提供服务. 本框架使用的是共享数据库.共享 Schema.共享数据表的数据 ...

  2. 《Linux内核设计与实现》读书笔记(十七)- 设备与模块

    本章主要讨论与linux的设备驱动和设备管理的相关的4个内核成分,设备类型,模块,内核对象,sysfs. 主要内容: 设备类型 内核模块 内核对象 sysfs 总结 1. 设备类型 linux中主要由 ...

  3. Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧

    我们经常要对表单里各种类型的字段进行读取或赋值,下面列出各种类型的读写方法及注意事项: 1. lookup 类型 清空值 var state = Xrm.Page.getAttribute(" ...

  4. C#中手工进行声明式验证,从此远离if验证

    今天在一个ASP.NET MVC Controller Action中写代码时,需要对ViewModel的字段进行验证.但这个Action处理的是手工编写的ajax请求(不是表单提交),无法使用ASP ...

  5. python __del__

    python __del__ 转自:http://blog.csdn.net/bbdxf/article/details/25774763 最近学习<Python参考手册>学到Class部 ...

  6. [ucgui] 对话框4——模式消息窗口

    >_<" 这里实现点击灰色窗口的按钮出现一个模式消息窗口,点击OK之后才能再聚焦到灰窗口:点击灰窗口除了按钮的地方,弹出一个非模式窗口.

  7. 选择哪种方式进行SharePoint的备份

    关于SharePoint的备份还原功能,大家可能都有所了解.但是SharePoint一共有多少种备份方式呢,哪种备份方式是更适合你的呢,本文主要为大家梳理,并且深入的研究一下常见的几种备份方式,以便大 ...

  8. 深究JS异步编程模型

    前言  上周5在公司作了关于JS异步编程模型的技术分享,可能是内容太干的缘故吧,最后从大家的表情看出"这条粉肠到底在说啥?"的结果:(下面是PPT的讲义,具体的PPT和示例代码在h ...

  9. Bootstrap3生成响应式的特价商品展示布局

    在线演示 本地下载 在线前端调试地址,大家可以在线自己调试. 在线调试唯一地址:http://www.gbtags.com/gb/debug/fa35e396-0a04-4b73-9bfc-c6334 ...

  10. CSS入门级学习

    css入门学习1:认识CSS 1.1:css简介,css全称是层叠样式表,Cascading style sheets 1.2:css的作用,主要是用于定义html内容在浏览器内的显示样式,如文字大小 ...