带你看看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. 老调重弹:JDBC系列之<驱动加载原理全面解析) ----转

      最近在研究Mybatis框架,由于该框架基于JDBC,想要很好地理解和学习Mybatis,必须要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来,好好总结一番,作为自己的笔记,也是给读者 ...

  2. How to Call SharePoint 2013 API Service to Query The Lists

    How to Call SharePoint 2013 API In SharePoint 2013, we can query the list by it owner service, then ...

  3. 微软分布式框架Orleans开源了

    开源地址: https://github.com/dotnet/orleans 昨天编译了一下,这个最新的Orleans安装程序(用github源码编译的) 下载地址:http://pan.baidu ...

  4. OWIN的理解和实践(二) – Host和Server的开发

    对于开发人员来说,代码就是最好的文档,如上一篇博文所说,下面我们就会基于Kanata项目的一些具体调用代码,来进一步深入理解OWIN的实现和作用. 今天我们先针对Host和Server来实现一个简单的 ...

  5. 关于CSS中清除浮动的方法

    在使用CSS样式时会经常使用到浮动(float),这时如果没有清除浮动就会造成很多怪异的现象,因此对父级元素清除浮动是必须要做的,这样也是书写CSS的一个良好习惯. 目前常用的方法大致有三种. (1) ...

  6. JsRender for index 循环索引使用说明

    循环是模版引擎必不可少的一部分,而说起循环,会引出一个至关重要的因素:索引. 所谓索引,即循环次数,通过索引,可以获取当前循环是第几次. 如果读者阅读过官方文档,会见到如下获取索引的方式: data: ...

  7. 移动开发下Xamarin VS PhoneGap

    跨平台开发 移动应用开发对很多开发人员来说是一种令人恐惧的事情.许多企业希望能够通过开发移动应用程序,来提升企业业务水平,开发原生App时往往又缺少专业的Objective C 或 Java 移动开发 ...

  8. java生成竖排文字图片

    package com.kadang.designer.web.action;import java.awt.Color;import java.awt.Font;import java.awt.Fo ...

  9. Hello.class所在路径下, 输入命令:java Hello.class,会出现什么结果,为什么?

    所在路径下, 输入命令:java Hello.class: 因为DOS没有规定路径,所有么有在默认路径下找到Hello.class文件,导致提示 错误: 找不到或无法加载主类 Hello.class.

  10. Hadoop MapReduce例子-新版API多表连接Join之模仿订单配货

    文章为作者原创,未经许可,禁止转载.    -Sun Yat-sen University 冯兴伟 一.    项目简介: 电子商务的发展以及电商平台的多样化,类似于京东和天猫这种拥有过亿用户的在线购 ...