objective_objective-c - CSDN
  • 1、190节大容量课程:包含了Objective-C语言大部分知识点; 2、创新的教学模式:手把手教您iOS开发技术,一看就懂,一学就会; 3、完美贴心的操作提示:让您的眼睛始终处于操作的焦点位置,不用再满屏找光标; 4...
  • iOS9程序设计(顶级iOS开发视频课程-Objective-C版) 本课程主要内容包括: iOS9的基础知识 常用控件 屏幕适配 多窗口 导航 表视图 GPS 地图 网络 数据存储、 音频 视频 本地化等内容,并提供了大量的...
  • 为了帮助广大同学学习iOS开发打好基础,我们智捷课堂推出了《从零开始学Objective-C》视频课程,本课程包括了:C语言基础、第一个Objective-C程序、Objective-C面向对象特性、继承与多态等概念。
  • 这是一门快速入门iOS开发的课程,目的是让大家快速学会,iOS开发环境搭建... 提供完整的Git提交历史,和每节视频一一对应,目前有41次提交,355行注释,271行代码(不包含可视化布局文件,纯Swift和Objective-C代码)。
  • 该系列课程是iOS开发之Objective-C基础入门视频。课程中会详细的讲解OC语法特点,面向对象的使用,循环引用的问题,block的特点及使用,枚举与结构体,Foundation框架等。是针对初级的入门iOS开发的优质视频。
  • Objective-C 咳咳,今天我是你的私教美少女朵朵,开始上课。 接触一门新语言,先要了解它的历史。 Objective-C 是一种简单的计算机语言,设计为可以支持真正的面向对象编程。Objective-C 通过提供类定义,方法...

    Objective-C

    私教美少女开始上课。

    接触一门新语言,先要了解它的历史。

    此篇博文主要是了解下什么是Objective-C,朵朵主要学习的Java,以前没听说过Objective-C,但是多学一点总是没有坏处,所以就从头开始咯。

    热心网友提供了很多资料。

    Objective-C

    纵向看来,Apple公司领导着Objective-C语言的发展与维护,包括Objective-C运行时,Cocoa/Cocoa-Touch框架以及Objective-C语言的编译器。

    什么是Objective-C

    什么是Objective-C呢?朵朵网上查了一下,百科词条它是这样说的:

    Objective-C,通常写作ObjCOC和较少用的Objective CObj-C,是扩充C的面向对象编程语言。它主要使用于Mac OS XGNUstep这两个使用OpenStep标准的系统,而在NeXTSTEPOpenStep中它更是基本语言
    GCC与Clang含Objective-C的编译器,Objective-C可以在GCC以及Clang运作的系统上编译。

    好多术语看不懂,没关系,重点知道:它是扩充C的面向对象编程语言,主要使用在Mac OS X系统中,Objective-C的流行归功于iPhone的成功。编写iPhone应用程序的主要编程语言是Objective-C。就可以了。

    具体的大家点进去百科词条的链接看一下:Objective-C_百度百科上面已经把这门语言的历史和内容讲的很清楚了。
    在这里插入图片描述继续打开一个网页,出现了Objective-C入门教程,以下资料查自:Objective-C入门教程
    先讲了什么是Objective-C,和百度百科查的差不多。

    Objective-C 是一种简单的计算机语言,设计为可以支持真正的面向对象编程
    Objective-C 通过提供类定义方法以及属性的语法,还有其他可以提高类的动态扩展能力的结构等,扩展了标准的 ANSI C 语言。类的语法和设计主要是基于 Smalltalk,最早的面向对象编程语言之一

    对象的使用和对象对象架构是 iPhone 程序设计的基础,理解他们如何交互对创建你的程序非常重要。

    最后该网站还提供了一个链接:Objective-C参考链接。不知道为什么这个链接我加载不出来。

    Objective-C的历史

    接下来的资料查自简书上的热心网友:Objective-C 基础,他对Objective-C是这样理解的:

    Objective-C 是一种通用、高级、面向对象的编程语言。它扩展了标准的 ANSI C 编程语言,将 Smalltalk 式的消息传递机制加入到 ANSI C 中。目前主要支持的编译器有 GCC 和 Clang

    这里也讲到了Objective-C的历史:

    历史
    Objective-C 主要由 Stepstone 公司的 Brad Cox 和 Tom Love 在 19 世纪 80 年代发明。
    1981年 Brad Cox 和 Tom Love 还在 ITT 公司技术中心任职时,接触到了 SmallTalk语言。Cox 当时对软件设计和开发问题非常感兴趣,他很快地意识到 SmallTalk 语言在系统工程构建中具有无法估量的价值。
    1983 年,Cox 与 Love 合伙成立了 Productivity Products International(PPI)公司,将 Objective-C 及其相关库商品化贩售,并在之后将公司改名为StepStone。
    1988年,斯蒂夫·乔布斯(Steve Jobs)离开苹果公司后成立了 NeXT Computer 公司,NeXT 公司买下 Objective-C 语言的授权,并扩展了 GCC 使之支持 Objective-C 的编译,基于 Objective-C 开发了 AppKit 与 Foundation Kit 等库,作为 NeXTSTEP 的的用户界面与开发环境的基础。
    1996年12月20日,苹果公司宣布收购 NeXT Software 公司,NEXTSTEP/OPENSTEP 环境成为苹果操作系统下一个主要发行版本 OS X 的基础。

    热心网友https://www.jianshu.com/p/7e45eb0fbfc2提供了资料Objective-C的起源
    还有一篇讲了为什么学习Objective-C非常难:http://www.code4app.com/blog-960094-3531.html,中间讲到:

    实际上Objective-C是很严格的C语言的超集。而与流行的编程语言风格又差距太大。作为C语言的超集,它增加了很多东西,我们将简单看看它到底增加了什么复杂的东西。

    Objective-C是一个很“大”的语言,我是说它的语法很复杂而且又具备弹性。Apple公司已经尽可能减小了Objective-C语言的体积,然而,他们还是添加了一些东西来让Objecive-C表达式更加简单。
    Synthesizing properties
    Dot-syntax for accessing getters/setters
    Garbage Collection
    Blocks (closures)
    Automatic Reference Counting
    Weak references
    所以虽然这个语言越来越大了,但是在表达同样的目的使用的代码却越来越简单。

    当你去学习Objective-C时,它不仅仅就是一个框架, 一个运行时或者一个编译器;而是它们全部。还有个很重要的部件就是 Automatic Reference Counting(使用后无法直接调用dealloc方法),这玩意会让你使用Cocoa/Cocoa-Touch编程时更加方便。

    紧密耦合系统代码设计是Objective-C独有的。其他语 言比如在.Net框架下运行的Iron Python。以及一大堆运行在JVM的非Java语言,比如Clojure。甚至Ruby以及Rails都是两个不同的项目。当你打算使用其他语言配合 Cocoa/Cocoa-Touch以及Objective-C运行时时。你唯一的选择就是Mac Ruby。

    啊哈,以上就是Objective-C的简单了解,就到这里吧,下课。

    对了,觉得朵朵讲不清楚想要指点的大佬,请直说,不要因为我是朵娇花而怜惜我。

    展开全文
  • 作为一个Objective-C的coder,我总能听到一部 分人在这门语言上抱怨有很多问题。他们总在想快速学习这门语言来写一个App出来,但他们也总是联想到Objective-C看上去实在太难了或者在想这 些语法符号都是神马玩意?...

    作为一个Objective-C的coder,我总能听到一部 分人在这门语言上抱怨有很多问题。他们总在想快速学习这门语言来写一个App出来,但他们也总是联想到Objective-C看上去实在太难了或者在想这 些语法符号都是神马玩意?不错,他们问得非常好,所以本人也解释一下为什么很多程序员相比较学习Ruby或者Java很容易,但在决定开发iOS或者OS X应用时会那么犹豫。

    语法:

    首先我们谈谈神马叫做编程语言,编程语言是一种让人们能读懂并且能够展现程序的执行行为的语言,包括语法(正确的表达式以及状态机的使用规则)以及语义(如何去组织这些表达式以及状态机以一种有意义的方式去完成我们的目标)

    大部分编程语言都是基于C语法风格的,也就是我们常说的点语 法,依靠小数点符号来调用方法或者获取类的成员(当然了,在C语言中类被替代为结构体)。它们通常都是自己实现类的定义(注意在这里Java与C#和 C++有稍微一点不一样),但无论如何这些语言的具体细节都是一样的。当我们接触一个新的编程语言时,我们当然很乐意看到新语言的语法是我们似曾相识的。 毕竟大部分程序员都了解C语言的语法。

    然而Objective-C压根就不是C语法风格的编程语言。它与我们熟悉的语言语法区别太大以至于大部分程序员根本看不懂这些Objective-C代码是神马东西。

    甚至其他一些像Python或者Ruby这样的“奇怪”的语言 都能让人看个大概出来,毕竟Python与Ruby至少还是点语法风格的,使用点语法来调用方法以及获取类的成员。相反它们缺乏分支结构并不会长时间影响 程序员的理解,毕竟这两种语言也有自己的方式来完成同样的目标。

    下面我们来介绍一下Objective-C语言: 这里我会拿另一个OOP语言来与它进行比较
    这里写图片描述
    我想这里大家肯定还不会有什么问题,来看看这个:
    这里写图片描述
    好了好了,我想肯定有部分人想问一大堆问题了。但这还不是最糟糕的,我们接着来看一个更强悍的:
    这里写图片描述
    一般到了这里,我想大家都头都大了几圈。

    这到底是个神马情形?这么多分号!太恐怖了!接着会冒出一大堆问题:这到底调用的是神马方法?又是怎么调用的?是performAction吗还是别的东西?方法重载该如何做?哦,我的天!

    最好先忘了我们熟悉的方法调用。实际上,当你看到performAction:withTwoParameters:时,我们其实在谈论消息而不是方法。当你能这么理解时问题就好办多了。

    实际上Objective-C是很严格的C语言的超集。而与流行的编程语言风格又差距太大。作为C语言的超集,它增加了很多东西,我们将简单看看它到底增加了什么复杂的东西。

    Objective-C是一个很“大”的语言,我是说它的语法很复杂而且又具备弹性。Apple公司已经尽可能减小了Objective-C语言的体积,然而,他们还是添加了一些东西来让Objecive-C表达式更加简单。

    Synthesizing properties
    Dot-syntax for accessing getters/setters
    Garbage Collection
    Blocks (closures)
    Automatic Reference Counting
    Weak references

    所以虽然这个语言越来越大了,但是在表达同样的目的使用的代码却越来越简单。

    运行时:

    Objective-C的运行时是动态的,它能让你在运行时为类添加方法或者去除方法以及使用反射。
    除非你用过像Ruby或者Lisp这类支持这种特性的语言,否则你会感觉很怪异。但请放心!在你尝试使用一些好的新特性时一开始都是很郁闷的。

    框架:

    如果离开了Cocoa/Cocoa Touch框架,那么Objective-C简直没法创建App。就如同Ruby离开了Rails就没法创建Web应用程序一样。
    Cocoa既大又老。比如看看UIView的contentStretch属性,整个头文件就这么点东西:

    1   @property(nonatomic) CGRect contentStretch __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); // animatable. default is unit rectangle {{0,0} {1,1}}

    就这么多?首先我假定它定义了一个可拉伸的内容区域,但是这是如何做到的?矩形单元又在哪里?Cocoa/Cocoa-Touch是解释这个的唯一途径,作为Objective-C的新人,你可以去咨询它。

    历史:

    纵向看来,Apple公司领导着Objective-C语言的发展与维护,包括Objective-C运行时,Cocoa/Cocoa-Touch框架以及Objective-C语言的编译器。看上去Objective-C就如同以下一个云状图:
    这里写图片描述
    当你去学习Objective-C时,它不仅仅就是一个框架, 一个运行时或者一个编译器;而是它们全部。还有个很重要的部件就是 Automatic Reference Counting(使用后无法直接调用dealloc方法),这玩意会让你使用Cocoa/Cocoa-Touch编程时更加方便。

    紧密耦合系统代码设计是Objective-C独有的。其他语 言比如在.Net框架下运行的Iron Python。以及一大堆运行在JVM的非Java语言,比如Clojure。甚至Ruby以及Rails都是两个不同的项目。当你打算使用其他语言配合 Cocoa/Cocoa-Touch以及Objective-C运行时时。你唯一的选择就是Mac Ruby。

    未来 :

    这4年来,我们可以看到Apple公司已经尽可能的减小 了Objective-C语言的大小以及复杂度。他们也完成了手动内存自动管理以及经典C头文件的方式;而且开始慢慢对属性存取器引入点语法以及 Automatic Reference Counting来方便程序员编程。但就现在看来,Objective-C还是比较难接触与学习的;之所以现在变得越来越流行唯一的原因就是它是做iOS app的唯一途径了。

    大家可以加我的微信,我会提供关于iOS开发相关的各种资料!
    这里写图片描述

    文章转载于:
    http://www.code4app.com/blog-960094-3531.html
    (出处: Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com)

    展开全文
  • Objective-C

    2020-03-12 23:30:28
    Objective-C个人学习笔记
  • 协议(protocol)是Objective-c中一个非常重要的语言特性,从概念上讲,非常类似于JAVA中接口. 一个协议其实就是一系列有关联的方法的集合(为方便后面叙述,我们把这个协议命名为myProtocol)。协议中的方法并不是...

    协议(protocol)是Objective-c中一个非常重要的语言特性,从概念上讲,非常类似于JAVA中接口. 一个协议其实就是一系列有关联的方法的集合(为方便后面叙述,我们把这个协议命名为myProtocol)。协议中的方法并不是由协议本身去实现,相反而是由遵循这个协议的其他类来实现。换句话说,协议myProtocol只是完成对协议函数的声明而并不管这些协议函数的具体实现。

    声明一个协议的语法非常简单:

    @protocol myProtocol <NSObject>
    @required
    -(void) protocolNameA:(NSString*)string;
    @optional
    -(void) protocolNameB:(NSString*)string;
    @end

    第一行是声明这个协议的名字为myProtocol。尖括号中的NSObject本身也是一个协议,其中定义了很多基本的协议函数,比如performSelector,isKindOfClass,respondsToSelector,conformsToProtocol,retain,release等。

    协议接口分为required和optional两类。required顾名思义是说遵守这个协议的那个类“必须要”实现的接口,而optional则是可以实现也可以不实现的。协议接口的定义和普通的函数定义是一样的。

    最后一行@end表示协议定义结束。这个协议的定义通常是在.h文件中。


    定义一个类遵循这个协议:

    @interface myClass  <myProtocol>
    @interface myClass :NSObject<myProtocol>
    @interface myClass :NSObject<myProtocol, NSCoding>
    上面分别是三种不同的情况。编译的时候编译器会自动检查myClass是否实现了myProtocol中的必要的(@required)接口。如果没有实现则会发出一个警告信息。另外需要注意的是,如果有继承自myClass的子类,这些子类也是会自动遵循myClass所遵循的协议的,而且也可以重载这些接口。


    为什么需要协议?

    苹果的官方文档指出三个原因:

    To declare methods that others are expected to implement

    To declare the interface to an object while concealing its class

    To capture similarities among classes that are not hierarchically related

    其实还有第四个很重要的原因,那就是减少继承类的复杂性。一个经典的例子就是iOS UI框架里面的UITableViewController类。假如没有“协议”功能,用户就必须选择用继承和重载接口的方法来实现复杂的UI控制以及其他事件的处理——这就对基类的设计提出了更大的挑战了。对于像这样一个table view,一个很好的实现方法就是采用协议,由协议里的接口来控制不同的数据源以及各种复杂的用户操作。UIKit中设计了两个很好的协议UITableViewDelegate,UITableViewDataSource来实现UITableViewController的控制。任何遵循这两个协议的类都可以实现对UITableView的控制。


    关于 id类型的运用:(不喜欢钻牛角尖的朋友,可以略过这一部分)

    id 类型在iOS中是一个通用类型,有点类似C语言的void*类型。编译器不能检查到定义为id类型的变量的实际类型,id类型的识别是发生在运行时阶段。但是我们可以用 id<protocol_name> obj;这样的语法形式在编译阶段就可以让编译器知道obj只可以发送protocol_name中的消息,如果所发送的消息不在protocol_name中,编译器会给一个警告信息“Instance method 'xxxx:' not found......”。这种情况多用于代理模式的实现,比如某一个类有一个delegate 的property:

    id <myProtocol> delegate;

    这样,在编译阶段我们就可以知道用delegate所发送的消息是不是在它所遵循的myProtocol中的消息。好了, 到这里笔者钻起了牛角尖,我把id后面的 <myProtocol>删掉,然后用delegate发送一个并不存在于myProtocol中的消息,结果编译器还是给了“Instance method 'xxxx:' not found......”的警告信息。更奇怪的是,当发送一个存在于myProtocol中的消息时,编译器竟然没有这样的警告信息。这两个测试并不能说明之前的解释是错误的,姑且认为id<myProtocol> delegate这种写法是为了便于知道这个delegate遵循了myProtocol的协议吧。
      本文若有任何错误,欢迎拍砖指正,谢谢!
    展开全文
  • 前言 学习过Swift之后,好久没用已经生疏了,现在有项目来了,不得不停下手下的工作,开始学习OC,当然这篇文章会以Java基础和C基础作为支撑,这样学习起来入门很简单,可能这篇文章有点个人主义,用作个人笔记吧 ...

    前言

    学习过Swift之后,好久没用已经生疏了,现在有项目来了,不得不停下手下的工作,开始学习OC,当然这篇文章会以Java基础和C基础作为支撑,这样学习起来入门很简单,可能这篇文章有点个人主义,用作个人笔记吧

    OC特点

    • 支持C语法
    • 支持面向对象特性
    • 兼容性好,可以同时在项目中使用OC、C++,也可以引入C、C++库文件
    • OC中没有命名空间机制,也没有包的概念,为了区分不同的类,在类名加前缀
    • OC中关键字表示都以@开头,用于区分C和C++的关键字,字符串也以@开头,如@public、@protected、@private、@”Hello World”

    文件名后缀

    语言 头文件后缀 主文件后缀
    c .h .c
    c++ .h .cpp
    oc .h .m
    oc与c++ .h .mm

    OC基本数据类型

    基本数据类型:数值型(整型、浮点型),字符型(char)、布尔型(BOOL)、空类型(Void)、Block类型、指针数据类型(class、id类型)、特殊类型(SEL、nil)

    1、instancetype和id类型

    1. instancetype可以作为返回类型,可以返回和方法所在类相同类型的对象,只能作为返回值
    2. id可以作为返回类型,返回任意类型的objcetive-c的对象类型,既可以作为返回值也可以作为参数

    类与属性

    1、 类的声明语法

    @interface Person : NSObject{
        属性声明
    }
        方法声明
    @end

    特点:

    1. @interface:相当于Java中的class
    2. 类名后面的冒号:相当于Java中的extends

    2、类的实现语法

    @implementation XYZPerson
        方法实现{
    
        }
    @end

    3、完整例子

    4、创建对象

    //第一种创建方式:创建一个可用的对象
    Person *p=[Person new];
    //new方法的内部会分别调用两个方法来完成2件事情
    //1、使用alloc方法来分配存储空间(返回分配的对象)
    //2、使用init方法来对对象进行初始化
    
    //1、调用类方法+alloc分配存储空间,返回未经初始化的对象
    Person *p1=[person  alloc];
    //2、调用对象方法-init进行初始化,返回对象本身
    Person *p2=[p1 init];
    //第二种创建方式:以上2步简化为
    Person *p=[[Person alloc] init];
    
    //默认初始化完毕后,所有成员变量的值都为0
    //用完对象要释放内存
    [lisi release];

    究竟new方式和alloc/init方式有什么区别?

    1. new和alloc/init在功能上是一致的,分配内存并完成初始化
    2. 采用new方式只能采用默认的init方法完成初始化
    3. 采用alloc的方式可以用自定义的构造方法完成初始化

    5、访问对象属性

    //调用类的属性,语法:对象->属性名
    lisi->age;
    lisi->name;
    //或者:(*对象名).对象属性
    (*lisi).name

    6、调用方法

    //调用无参方法,语法:[对象名 方法名]
    [Person eat]
    [Person run]
    //调用有参方法,语法:[对象名 方法名:参数]
    [Person eat:@"吃虾"]
    [Person run:5]

    7、@property和@synthesize

    在头文件中声明属性

    //编译器会自动补出其setget方法
    @property int age;

    在m文件中实现

    //编译器会自动生成setget方法的实现,默认已经自动@synthesize属性的值
    @synthesize age;

    构造方法

    1、默认的构造方法

    - (instancetype)init{
        if(slef = [super init]){
            //初始化
        }
        return self;
    }

    2、自定义构造方法

    一般构造方法都以init开头,这样并不是复写系统默认的构造方法,而是再添加一个构造方法

    - (instancetype)initWithDict:(NSDictionary *)dict{
        if(slef = [super init]){
            //初始化并赋值
            self.name = dict[@"name"];
        }
        return self;
    }

    函数

    1、减号表示对象方法,语法:-(返回值类型)方法名:(参数类型)参数名

    @interface Person : NSObject
    -(Void) someMethod;
    -(Void) someMethodWithValue:(someType)Value;
    @end

    特点:

    1. 函数的返回类型和参数类型必须用括号
    2. 函数的形参用冒号表示

    2、加号表示静态方法(类方法),语法:+(返回值类型)方法名:(参数类型)参数名

    @interface NSString: NSObject
    +(id) string;
    +(id) stringWithString:(NSString *)astring;
    +(id) stringWithFormat:(NSString *)format,...;
    @end

    区别:

    1. 对象方法可以直接访问属性,静态方法不能访问属性
    2. 静态方法可用类名直接调用方法,而对象方法不行

    点语法

    声明对象并提供get和set方法

    #import <Foundation/Foundation.h>
    
    @interface Person : NSObject{
       int _age;
    }
    - (void)setAge:(int)age;
    - (int)age;
    
    @end

    实现对象

    #import "Person.h"
    
    @implementation Person
    
    - (void)setAge:(int)age{   //set方法
        _age = age;
    }
    - (int)age{   //get方法
       return _age;
    }
    
    @end

    点语法的使用

    #import <Foundation/Foundation.h>
    #import "Person.h"
    
    int main(int argc, const char * argv[]){
        @autoreleasepool {    
            Person *person = [[Person alloc] init];
    
            person.age = 10;//点语法,等效与[person setAge:10];
            //这里并不是给person的属性赋值,而是调用person的setAge方法
    
            int age = person.age;//等效与int age = [person age];
            //这里调用person的set方法
    
            NSLog(@"age is %i", age);
            [person release];        
        }
        return 0;
    }

    为什么有些使用_age,有些语法使用self.age?

    属性值:_age
    点语法:self.age

    1. 下划线是一种编程规范,_age是直接拿到age这个属性,不通过getAge方法获取,建议在init里面使用_age
    2. self.age相当于调用[self getAge],系统自动生成的代码(_age = age),其实也是_age,如果你重写了getAge方法,返回的值就不一样了

    静态变量

    1、OC与Java或C的区别

    1. OC中的静态变量:它是私有的全局变量,不能直接通过类名访问,它只作用于它声明所在的.m文件中
    2. C或者Java中的静态变量:可以直接通过类名拿到这个变量,在其他类中可以进行修改

    2、静态变量全局化

    不是说OC中静态变量不能使用在其他类中,可以通过静态方法向外提供该静态变量

    在h文件中定义静态变量和向外提供静态变量的方法

    #import <UIKit/UIKit.h>
    //静态变量
    static int selectIndex;
    
    @interface TBC_SendPassword : UITabBarController
    //提供静态变量
    +(int)getSelectIndex;
    @end

    在m文件中覆写该方法,提供静态变量,你可以在m文件中修改对应的selectIndex的值

    +(int)getSelectIndex{
        return selectIndex;
    }

    在其他类中需要使用该类的静态变量,首先在h文件中导入头文件

    #import "TBC_SendPassword.h"

    在m文件中直接通过静态的方法的使用,获取对应的值

    if([TBC_SendPassword getSelectIndex] != 0){
        return;
    }

    Hello World

    相当于Java的main方法

    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]){
        @autoreleasepool{
            NSLog(@"Hello World");
        }
        return 0;
    }

    特点:

    1. Foundation.h是Foundation框架中的头文件,是OC一个基础类库,基本所有OC代码都要引入这个类库
    2. @autoreleasepool是OC的关键字,作用是对在关键字后面的程序自动进行内存回收

    import指令

    • #include指令:单独使用会造成导入重复库文件,从而引起报错
    • #import指令:#include增强版,有效处理重复导入问题,不会报错

    特点:

    1. 导入系统类库用<>,导入自定义类库用””
    2. BOOL类型,包含两个值YES和NO,其实布尔类型就是整数1和0

    NSLog

    //定义一个字符串,str存放是内存地址
    NSString *str = "你好";
    NSLog(@"str的地址=%p,str的值=%@",str,str);
    //打印OC字符串要用@""
    NSLog(@"Hello OC");
    //用C语言打印字符串
    printf("Hello OC");

    注意不能用C语言打印OC字符串,也不能用OC语言打印C字符串

    NSString

    //创建字符串
    NSString * str = @"Hello";
    //字符串长度,OC中英文都占1个字节
    [str length]
    //创建字符串对象
    NSString * str1 = [NSString new]
    //复制字符串
    NSString * str2 = [[NSString malloc]initWithString:str];
    //格式化字符串
    NSString * str3 = [NSString  stringWithFormat:@"图片 xx %02d- %02d",1,9];
    //字符串拼接
    NSString *newString = [NSString stringWithFormat:@"%@%@",str1,str2];

    NSMutableArray

    NSMutableArray是长度可变数组,也就是说当数组前面的元素被删除后,后面的元素会往前移,而NSArray是长度不可变数组

    //创建NSMutableArray
    NSMutableArray *mArray = [NSMutableArray array]; 
    //添加元素
    [mArray addObject:@"name"];
    //移除元素
    [mArray removeObject:@"name"];
    //移除所有元素
    [mArray removeAllObjects];
    //取出元素
    mArray[2];

    强制类型转换

    //字符转int
    int intString = [newString intValue];
    //int转字符
    NSString *stringInt = [NSString stringWithFormat:@"%d",intString];
    //字符转float
    float floatString = [newString floatValue];
    //float转字符
    NSString *stringFloat = [NSString stringWithFormat:@"%f",intString];

    NSBundle

    NSBundle是一个目录,其中包含了程序会使用到的资源,相当于项目中的主目录文件夹,NSBundle用得最多的是获取Plist文件,并获取Plist的内容,Plist文件可以简单理解为小数据库类型的文件,它在项目初始化时默认会创建一个info.plist文件,里面会存储系统的默认配置信息

    //打印沙盒路径
    NSLog(NSHomeDirectory());
    //创建NSBundle
    NSBundle *bundle = [NSBundle mainBundle];
    //获取NSBundle里myPic.png文件的路径的两种方法
    NSString *path = [mainBundle pathForResource:@"myPic" ofType:@".png"];
    NSString *path = [mainBundle pathForResource:@"myPic.png" ofType:nil];
    //获取NSBundle里的Plist文件
    NSString *plistPath = [mainBundle pathForResource:@"myList.plist" ofType:nil];
    //通过Plist路径获取字典
    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:plistPath];
    //通过Plist路径获取数组
    NSArray *array = [NSArray arrayWithContentsOfFile:plistPath];

    kvc

    OC中的KVC操作就和Java中使用反射机制去访问类中private权限的变量一样

    1、kvc与对象

    1.单个对象赋值:通过kvc的方式,可以省去自动解包和装包操作

    //通过kvc方式设置属性
    Person *p = [[Person alloc] init];
    [p setValue:@"jiangwei" forKey:@"name"];
    [p setValue:@22 forKey:@"age"];
    //通过kvc方式读取属性
    NSString *name = [p valueForKey:@"name"];        

    2.单个对象对对象赋值:对象中包含另一个对象

    Book *book = [[Book alloc] init];
    Author *author = [[Author alloc] init];   
    //通过kvc方式设置对象
    [book setValue:author forKey:@"author"];

    3.单个对象对数组赋值:对象中存在数组属性,数组装的是另一个对象

    //author中的issueBook字段是个NSArray
    //通过kvc方式获取数组的大小,语法:NSArray.@count
    NSNumber *count = [author valueForKeyPath:@"issueBook.@count"];
    //通过kvc方式获取书籍价格的总和,语法:NSArray.@sum+字段名
    NSNumber *sum = [author valueForKeyPath:@"issueBook.@sum.price"];
    //通过kvc方式获取书籍的平均值,语法:NSArray.@avg+字段名
    NSNumber *avg = [author valueForKeyPath:@"issueBook.@avg.price"];
    //通过kvc方式获取书籍的价格最大值和最小值,语法:NSArray.@max+字段名
    NSNumber *max = [author valueForKeyPath:@"issueBook.@max.price"];
    NSNumber *min = [author valueForKeyPath:@"issueBook.@min.price"];

    2、kvc与字典

    1.通过获取字典字段,将字典转换为属性

    self.name = dict[@"name"];
    self.icon = dict[@"icon"];

    2.通过kvc方式进行赋值,自动将字段与属性匹配,前提是字段名和字典名必须相同

    [self setValuesForKeysWithDictionary:dict];

    日期格式化

    //取出当前时间 
    NSDate *currentDate = [NSDate date];
    //设置时间格式
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    //时间的格式
    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    //获取时间的字符串
    NSString *date = [formatter stringFromDate:currentDate];
    展开全文
  • 很多想开发iOS,或者正在开发iOS的程序员以前都做过Java或者C++,当第一次看到Objective-C的代码时都会头疼,Objective-C的代码在语法上和Java, C++有着很大的区别,有的同学会感觉像是看天书一样。不过,语言都是...
  • 之前有段时间,我参与了一项使用了C++库的Objective-C项目。写了一篇关于混编的文章,结果却出乎意料的成为Google搜索中关于Objective-C++的最靠前的结果之一。 后来,Apple将基于LLVM的clang做为主选编译器。...
  • iOS安全攻防(二十三):Objective-C代码混淆class-dump可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善的程序给同行留下笑柄。所以,我们迫切的希望混淆自己的代码...
  • Book Description Updated for OS X 10.9 Mavericks, iOS 7, and Xcode 5 Programming in Objective-C is a concise, carefully written tutorial on the basics of Objective-C and object-oriented programming ...
  • 中文名: Objective-C基础教程 作者: Mark Dalrymple Scott Knaster译者: 高朝勤 杨越 刘霞图书 分类: 软件 资源格式: PDF 版本: 扫描版 出版社: 人民邮电出版社 书号: ISBN: 9787115208774 发行时间: 2009...
  • Objective-C for Absolute Beginners, 4th Edition iPhone, iPad and Mac Programming Made Easy Objective-C for Absolute Beginners, 4th Edition Author: Brad Lees, Gary Bennett, Mitch Fisher, Stefan ...
  • 如果你具备一些编程经验,但还是Objective-C新手,那么本书将为你提供一个快速的、现代的指南,帮助你编码自己的项目。  在两位专业的Mac和iOS应用开发者的引导下,《Objective-C开发经典教程》快速介绍了Objective...
  • Objective-C程序设计》是为在苹果iOS和OS X平台上,使用Objective-C语言和面向对象程序设计模式进行专业开发而编写的简洁、细致的入门读物。本书假设读者无面向对象程序语言或C语言编程经验,以保障初学者与有经验...
  • 互用性是让 Swift 和 Objective-C 相接合的一种特性,使你能够在一种语言编写的文件中使用另一种语言。当你准备开始把 Swift 融入到你的开发流程中时,你应该懂得如何利用互用性来重新定义并提高你写 Cocoa 应用的...
  • objective-c是Apple系统官方的开发语言之一,最近因为项目原因需要开发IOS应用,所以就要学习objective-c。由于时间紧迫不可能一直在公司看资料练习,平常在租房时也需要看资料。编程语言本来就是实践学科,光靠看书...
1 2 3 4 5 ... 20
收藏数 153,078
精华内容 61,231
关键字:

objective