写在前面 弄了下个人站...防止内容再次被锁定...所有东西都在这里面 welcome~ 个人博客 plist文件是以类似xml形式构造数据,下面我们直接在xcode中创建完成一个plist...创建plist.png 我们可以选择存储类型。这里我构造一组数据,数据中的每个元素都是一个字典,字典中存放着name songName imageName 三个键值。 ?...plist构造数据.png 这样我们的plist文件就完成了,下面来说一说通过kvc的方式来读取plist文件。...kvc的概念简单说下 Key-Value-Coding(KVC)键值编码 我们主要使用的是KVC字典转模型,将plist文件中的数据以数据模型的形式读取。...由于我们plist文件的根节点是一个数组 我们以懒加载的方式来创建这个数组,并将从plist中读取的字典信息以模型的形式存储到数组中。
使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,如下所示: 实例(Python 2.0+) #!...list = [] ## 空列表 list.append('Google') ## 使用 append() 添加元素 list.append('Runoob') print list 注意:我们会在接下来的章节讨论...append()方法的使用 以上实例输出结果: ['Google', 'Runoob'] ---- 删除列表元素 可以使用 del 语句来删除列表的元素,如下实例: 实例(Python 2.0+) #!...'chemistry', 1997, 2000] After deleting value at index 2 : ['physics', 'chemistry', 2000] 注意:我们会在接下来的章节讨论...remove()方法的使用
Objective-C中的hasPrefix hasPrefix:方法的功能是判断创建的字符串内容是否以某个字符开始,其语法形式如下: -(BOOL)hasPrefix:(NSString*)...该方法的返回值为BOOL,当BOOL为YES或者为1时,则字符串是以某个字符开始;当BOOL为NO或者为0时,则字符串不是以某个字符开始。 ...【示例】以下程序通过使用hasPrefix:方法来判断使用stringWithCString:方法创建的字符串是否以字母B开始,如果是以字母B开始,输出开头为字母B;如果不是,输出开头不为字母B。
访问对象值 1、你可以使用点号(.)来访问对象的值:实例 var myObj, x; myObj = { "name":"runoob", "alexa":10000, "site":null...}; x = myObj.name; 2、你也可以使用中括号([ ])来访问对象的值:实例 var myObj, x; myObj = { "name":"runoob", "alexa":10000...,使用中括号([])来访问属性的值:value在使用for遍历时,只能通过 myObj[x] 来获取相应属性的值,而不能使用 myObj.x** 实例 var myObj = { "name":"runoob..."site1":"www.runoob.com", "site2":"m.runoob.com" } } 2、你可以使用点号(.)或者中括号([])来访问嵌套的 JSON 对象。...= "www.google.com"; 2、你可以使用中括号([])来修改 JSON 对象的值: 实例 myObj.sites["site1"] = "www.google.com"; 删除对象属性
OC中调用方法某个对象的消息呦两种方式: #1. performanceSelector: withObject: #2. NSInvocation...., 但只传递2个参数, 这样方法的第三个参数会自动取我们传的第二个的值 [self performSelector:@selector(printStr1:Str2:Str3:) withObject...invocation.target = self; //设置方法名, 这里一定要跟方法签名类中的方法名一致 invocation.selector = @selector(printStr1...,并且取它们之间的最小值 NSUInteger argsCount = signature.numberOfArguments - 2; NSUInteger arrCount = objects.count...获得返回的类型编码,因此可以推断返回值的具体类型
OC中使用引用计数和垃圾回收来管理内存,在OC中为每个对象分配一个引用计数器,当对象刚刚被创建时其初始值为1,当有某段代码需要访问一个对象是时,会将该对象的引用计数器加1(通过retain来实现);当访问一个对象结束时...等方法的,需要在XCode中进行设置,设置如下: 把Objective-C Automatic Reference Counting 改为NO,即可。 ...之前提到的NSOject类里有个方法,retainCount可以获取当前对象的引用计数的值,废话少说上点代码吧。 1....(3).在可变数组中移除一个str,观察retainCount的变化 (4)我们为什么要用可变的字符串呢?稍后会提到为什么。...FomatRetainCount = 3 2014-08-03 20:18:37.240 Memory[2499:303] 传入的变量RetainCount = 3 Objective-C中得
Objective-C 2.0中的属性机制为我们提供了便捷的获取和设置实例变量的方式,也可以说属性为我们提供了一个默认的设置器和访问器的实现。...@protected :受保护的,该实例变量只能在该类和其子类内访问,父类protected的实例变量在子类中是private的默认是protected; 3....和setter来访问被隐藏的实例变量,OC中的属性机制就为我们提供了默认的getter和setter方法。...:决定了以何种方式对数据成员赋予新值 strong : 表示强引用关系,即拥有对象的所有权。 ...nonatomic: 线程不安全的; 我们可以简写属性,直接在接口文件中吧{}省略掉,直接用@property来定义方法,省去实现文件中的@synthesize, 访问属性时用_propertyName
下面详细的介绍Objective-C中的集合类以及每个集合类的用法,学过其他面向对象编程语言的小伙伴们看到OC的集合类会有种莫名的亲切感,理解起来问题不大,可以类比Java中的集合类去学习...在Objective-C中的集合类中主要包括不可变的数组--NSArray, 可变的数组--NSMutableArray, 不可变的字典--NSDictionary, 可变的字典--NSMutableDictionary...Map, 里面存的是键值对,key的值是不可以重复的。...字典有可改变的和不和不可改变之分 1.不可变字典NSDictionary (1)字典的创建和获取字典的值 1 2 3 4 //不可变字典的初始化...OC中的集合类中是不能放基本数据类型的,那么我们如何把基本数据类型封装成对象呢?
defer 所声明的 block 会在当前代码执行退出后被调用。正因为它提供了一种延时调用的方式,所以一般会被用来做资源释放或者销毁,这在某个函数有多个返回出口的时候特别有用。 ?...Objective-C Swift 在OC中也有一个类似的方法:__attribute__((cleanup(...)))...这个方法可以在作用域结束的时候执行指定的方法: { ......*string){ NSLog(@" 打印信息string:%@",*string); } //输出结果为 打印信息string:作用域结束 可以传递一个block,实现类似Swift中的...strong void(^*deferBlock)(void)) { if (*deferBlock) { (*deferBlock)(); } } 将其设置为NSObject类的一个扩展方法的话则可以这样使用
刚接触OC不久,今天做深浅拷贝的测试,无意中把获取NSArray的值写成了用下标获取的方式。...当时把注意力放在了深浅拷贝的内存地址分析上了,就没太在意,测试做完啦,在回顾的时候发现数组是用下标的方式获取的! 于是就有了个疑问,在OC中这样写也行?...不是NSArray中有一个方法叫做objectAtIndex来专门获取数组的元素嘛,嗯~用下标也行?此时心里窃喜,可以简化一下数组访问元素的方式了,又可以偷懒啦!!...为了更好的偷懒,于是去百度上Google啦一下这是‘ Xcode 4.4中LLVM compiler 4.0’ 引入的新特性(2012年WWDC发布的东西)。...ludashi~走起~(虽然是12年的东西,这不刚学蛮~在OC中用感觉挺新鲜的,简化后对字典的初始化感觉和PHP有点相似~感觉见到亲人啦~) 问题是数组引起的那么就从数组开始吧 1.一般数组的初始化和访问数组元素是这样的
Objective-C中通过下标的方式访问自定义数据模型中属性 在Objective-C中,可以通过下标来访问数组中的元素,如果数组是NSMutableArray类型的可变数组,则还可以通过下标来对数组中的元素进行赋值操作...中的字典对象,可以通过键值下标的方式来进行访问,例如: NSMutableDictionary * dic = [[NSMutableDictionary alloc]init]; dic...[@"name"] = @"name"; NSLog(@"%@",dic[@"name"]); 对于开发者自定义的的数据结构,一般会采用getter与setter方法来对其属性进行访问...,虽然官方文档上没有提及,实际上,可以通过实现一些方法,来使自定义的数据模型支持使用下标来进行访问。 ...NSUInteger)idx { return [self valueForKey:[NSString stringWithFormat:@"_index%lu",idx]]; } //通过下标设置属性值
Objective-C中runtime机制的应用 一、初识runtime Objective-C是一种动态语言,所谓动态语言,是在程序执行时动态的确定变量类型,执行变量类型对应的方法的...,首先,在头文件中没有提供任何的方法接口,我们没有办法使用点语法做任何操作,privateOne和PrivateTow两个变量虽然声明在了头文件中,却是私有类型的,通过指针的方式我们虽然可以看到他们,却不能做任何读取修改的操作...,xcode中的提示如下: ?...,你或许会遇到一个问题,ARC下,编译器不允许你将int类型的值赋值给id,在buildset中将Objective-C Automatic Reference Counting修改为No即可。...五、让我看看你的方法吧 变量通过runtime机制我们可以取到和改变值,那么我们再大胆一点,试试那些私有的方法,首先我们在MyObject类中添加一些方法,我们只实现,并不声明他们: @
在学习iOS App开发中遇到需要计算时间差并格式化输出的需求,没有现成的方法,需要结合NSCalendar和NSDateComponents来实现。...所以干脆把代码封装成一个熟悉的dateDiff方法。...不过这个方法跟VB和sql里的dateDiff还是有点不一样,虽然可以封装成完全一样,不过我觉得直接返回NSDateComponents会更方便,因为所需要的各种单位上的值都包含在其中了。...我是把代码封装到自己的一个工具类KRUtils里作为类方法,使用起来也很方便。
在Objective-C中super是指向直接父类的指针,而self是指向本身的指针,self就相当于java中的this指针。...-(BOOL) isEqual:(id)object; 比较两个对象是否相同,默认是使用地址进行比较的,且hash值一定要相同 1 2 3 4 5 6 7 8 9 10 11 //isEqual的用法...= str1"); } Objective-C中的继承 继承是is-a的关系,比如猫咪是一个动物,那么动物是父类,而猫咪是动物的子类。...1.先定义一个富人的类 代码说明: 1.声明访问权限为@protected的三个属性,分别为三个属性用@property加上getter和setter方法...2014-07-30 08:38:12.958 HelloOC[483:303] 我是富二代BILL`s son,我超喜欢飙车 Objective-C中的多态 多态简单的说就是对于不同对象响应同一个方法时做出的不同反应
int sum = myBlock(10,20); NSLog(@"fun_sum = %d", sum); } 5.在代码块中使用局部变量和全局变量 在block中可以和对全局变量进行访问和修改...上面提到了在代码块中可以引用局部变量但是不可以更改其值,除非在声明的时候加上__block关键字。 ...,然后在调用代码块的时候修改两个局部变量的值,然后再代码块中显示变量的值。 ...2.成员变量在block中的使用 成员变量在block中的使用是加上self->a使用的,所以在声明成员变量的时候加不加__block,在成员函数中的代码块中都可以访问修改; ...对于成员变量的修改都是通过对象self指针引用来实现的。 block内部对于成员变量的访问也是通过block结构体对象的成员self 指针引用来实现的。
Objective-C中NSArray类的解读 NSArray数组类是Objective-C语言中常用的也是重要的一个类,除了开发中常用到的一些基础功能,NSArray及其相关类中还封装了许多更加强大的功能...NSArray中属性与方法: //获取数组中元素个数 @property (readonly) NSUInteger count; //通过下标获数组中的元素 - (ObjectType)objectAtIndex...参数为C数组的长度 //如果cnt的值小于C数组的长度,则会对C数据进行截取赋值,如果大于则程序会崩溃 - (instancetype)initWithObjects:(const ObjectType...; //像数组中追加一个元素 这个方法会返回一个新的数组 - (NSArray *)arrayByAddingObject:(ObjectType)anObject; //像数组中追加一组元素...)range; //获取某个元素在数值中的下标值 - (NSUInteger)indexOfObject:(ObjectType)anObject; //获取某个范围内的元素的下标值 - (NSUInteger
Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上。...一.Objective-C中的类目(Category) 在Objective-C比其他OOP的编程语言多了个类目,在OC中除了用继承来扩充类的功能函数外我们还可以用类目来实现。... 1.给已有的类扩充方法 在Xcode中新建CategoryTest类,在新建类中声明两个实例变量,在实现类中重写description方法,打印输出两个实例变量的值...二.Objective-C中的延展(Extension) 简单的说匿名类目就是延展,在延展中定义的方法是类私有的方法只能在类的内部调用,定义延展的方式就是把类目中括号中得名字省略掉,括号保留这就是延展...其实在延展中定义的方法不是真正的私有方法和C++, Java中得方法还有所区别,在类初始化的文件中引入相应延展的头文件,其延展对应的方法也是可以访问的。
不过在23种设计模式里面单例模式还是算比较好理解的, 那么在OC中又是怎么来表示单例模式的呢?下面会结合着代码,理解一下OC中得单例模式。 ...下面我们会建立一个生成单例的类SingletonClass,在实现文件中定义各种方法来实现我们的单例模式。 ...= nil; 2.上面的静态变量是定义在实现文件中的所以是私有的,要想获取该类的实例得有个getInstance方法来获取实例,在给静态变量分配内存空间之前首先要判断是否已经分配过啦...dealloc,我们需要重写retainCount方法 1 2 3 4 5 //重写retainCount方法,防止被dealloc,返回最大值 -(NSUInteger) retainCount {...,下面开始我们的测试吧; 在main函数中的代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 //单例模式的测试 SingletonClass
还是那句话,第一次接触代理模式是在Java中接触的,在Java中实现代理模式和接口是少不了的。当时学习Spring的时候用到了接口回调,其实就是实现的委托代理模式。...简单的说代理就是把相应的功能交给实现接口的相应的类中来解决。在OC中没有接口该如何实现代理呢?...前面的博客中笔者说提了一句,在OC中的协议和Java中的接口极为相似,都是只声明方法而不去实现,方法的实现在OC中交个遵循协议的类,而在Java中方法的实现交给实现接口的类。...其实学习一门新的语言和以前学习过的语言对比着理解还是蛮好理解的,废话少说,切入正题,谈一下OC中的委托代理模式。 下面还是用房屋中介和房东的例子来表示OC中的代理模式。...1.在Java中写代理的话,我会先写房屋中介的接口,所以在OC中我们首先也要先声明房屋中介的协议,Protocol中的方法是每个房屋中介必须有的方法,所以在Java中会抽象成接口,而在OC中我们会把他声明为协议
@代表“Objective-C”的标志,证明您正在使用Objective-C语言 Objective-C语言关键词,@property与@synthesize配对使用。...声明的分类 在 Objective-C官方文档 中的Property一章里有对类Property详细说明。...@property中的声明列表已分类为以下几种: 1, 声明属性的访问方法: getter=getterName setter=setterName 声明访问属性的设置与获取方法名。...3,声明写方法的实现: assign 声明在setter方法中,采用直接赋值来实现设值操作。...如: C代码 -(void)setName:(NSString*)_name{ name = _name; } retain 声明在setter方法中,需要对设过来的值进行retain
领取专属 10元无门槛券
手把手带您无忧上云