首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Objective-C中的语法糖

当时把注意力放在了深浅拷贝的内存地址分析上了,就没太在意,测试做完啦,在回顾的时候发现数组是用下标的方式获取的! 于是就有了个疑问,在OC中这样写也行?...不是NSArray中有一个方法叫做objectAtIndex来专门获取数组的元素嘛,嗯~用下标也行?此时心里窃喜,可以简化一下数组访问元素的方式了,又可以偷懒啦!!...为了更好的偷懒,于是去百度上Google啦一下这是‘ Xcode 4.4中LLVM compiler 4.0’ 引入的新特性(2012年WWDC发布的东西)。...    在之前的博客中我是这样初始化NSArray的: 1 //NSArray的便利初始化 2 NSArray *array1 = [[NSArray alloc] initWithObjects:@...    也引用我之前博客中得一段代码吧 //不可变字典的初始化 NSDictionary *dictionay = [NSDictionary dictionaryWithObjectsAndKeys

1K50

objective-C中的扩展方法与partial class

PrintToConsole(); } } 在objective-C中,也有类似的处理办法: StringUtils.h 定义部分 #import <Foundation/Foundation.h...; [str PrintToConSole]; [pool drain]; return 0; } 不过有一点要特别注意:c#中如果开发人员增加的扩展方法跟.net框架自带的现有方法重名...但在obj-C中,这种情况下开发人员新增加的重名方法会覆盖系统原有的方法,而且没有任何提示!一个好的习惯是为所有扩展方法(包括类名),都加一个特殊的前缀或后缀,以避免重名。...表面上看,partial class与扩展方法是风马牛不相及的二个概念,但是在obj-C中,这二个其实是一回事。...productNo:0001 皆大欢喜,很多语言和技术真是“一门通,处处通”,也许:c#中的"扩展方法"与"部分类"的设计灵感正是来自objective-C。

86470
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Objective-C语法基础之Category的使用

    但是Objective-C提供了一种特别的方式来扩展类,叫Catagory,可以动态的为已经存在的类添加新的行为。这样可以保证在类的原来的基础上,较小的改动就可以增加需要的功能。...Category使用简单的方式,实现了类的相关方法的模块化,把不同的类方法分配到不同的分类文件中。 通过一个简单的例子看看Category如何使用。...WechatIMG35.jpeg 那的Category的使用场景: 1、类包含了很多个方法实现,而这些方法需要不同团队的成员来实现 2、当你在使用基础类库中的类时,你不想继承这些类而只想添加一些方法时...2、Category可以重载原始类的方法,不大不推荐这么做,这样会覆盖掉原始类的方法。如果确实要重载,那就通过继承创建子类来实现。...3、和普通接口有所区别的是,在Category的实现文件中的实例方法只要你不去调用它你可以不用实现所有声明的所有方法。 点击下载Demo

    42920

    Objective-C实现链式编程语法(DSL)

    - Carlson, University of Wisconsin 前言 熟悉Objective-C这一门编程语言的人都知道,Objective-C中方法的调用都是通过中括号[]实现的。...这对于有其他编程语言经验的开发者而言,Objective-C无异于就是众多语言中的一朵奇葩。因为其他多数的高级语言方法调用都是以点语法.的形式实现的。...好在Objective-C在iOS4.0之后推出了block这个语法(相当于其他语言中的匿名函数)。我们可以利用block的来实现Objective-C方法的链式调用。...obj = DSLObject.new.name(@"ws").age(27).address(@"beijing"); 很明显,相比较传统的Objective-C的方法调用方式,使用点语法进行方法调用更加简洁连贯...使用category实现链式语法,需要加前缀。使用中间类来实现链式语法,需要有一个特定的方法返回被配置的对象。两种方式各有利弊。 最后附上代码地址。

    8.1K20

    Objective-C对方法进行注释的方法

    名字看着挺绕的哈,其实就是对某个自己创建的方法进行注释,类似编写java代码时的注释javadoc一样,可以自动形成规范性的方法说明。...我们对方法进行注释时,最需要说明的就是方法的作用、方法的参数以及方法返回的结果,所以这里也只说这三个标签,其实很简单,如下所示: /** * @brief 通过两个参数请求一个结果....,紧挨着方法名在其上方输入上述的注释。...现在我们调用方法,然后在调用的地方对着方法名,按住option键,也就是alt键,再点击方法名,就会弹出方法的说明,这时就可以看到我们注释的效果了: 这样是不是很清晰明了。...虽然在声明方法时会做很多额外的工作,但是当代码量大了以后,这样做的效果就出来了,免得总是忘记各个方法是做什么的,参数又是什么,毕竟不能总是依靠起名嘛。

    46120

    MessageMock : 优雅的模拟 Objective-C 方法

    拿到切面过后,就可以拦截到所有的 Objective-C 方法调用,具备了做任何“坏事”的条件。...但值得注意的是,MessageMock 代码必经路径不能包含任何的 Objective-C 方法调用,不然会死循环,所以源码大部分是使用 C++ / Assembly 实现的。...上层使用的考虑 而考虑到上层接口是在 Objective-C 环境中运行,若一个作用域还未结束,这个MethodMatcher *就被释放了就会 Crash,所以上层接口层面是这样设计的: @implementation...接口设计 使用链式语法并不是笔者的初衷,主要是基于一些特殊的考虑。...另外,源码中的 C++ / Assembly 不是专业的、性能和设计也不是最优的,望各大佬指点一二不胜感激。

    85720

    Objective-C中的集合类

    下面详细的介绍Objective-C中的集合类以及每个集合类的用法,学过其他面向对象编程语言的小伙伴们看到OC的集合类会有种莫名的亲切感,理解起来问题不大,可以类比Java中的集合类去学习...在Objective-C中的集合类中主要包括不可变的数组--NSArray,  可变的数组--NSMutableArray,   不可变的字典--NSDictionary,    可变的字典--NSMutableDictionary...                字典的遍历方法是通过字典里的-(NSArray *)allKeys获取所有的key存入数组中然后通过遍历数组获取key对应的value,封装成函数如下: 1 2 3 4...1.不可变集合NSSet     ​    ​    ​    ​(1)NSSet的初始化和其他集合类一样也有其对应的便利初始化方法和便利构造器,     ​    ​    ​    ​    ​    ​...OC中的集合类中是不能放基本数据类型的,那么我们如何把基本数据类型封装成对象呢?

    1.1K70

    Objective-C中的属性机制

    Objective-C 2.0中的属性机制为我们提供了便捷的获取和设置实例变量的方式,也可以说属性为我们提供了一个默认的设置器和访问器的实现。...和setter来访问被隐藏的实例变量,OC中的属性机制就为我们提供了默认的getter和setter方法。...​getter和setter方法也可以用点语法来实现 //name的setter方法也可以这样写 student.name = @“ludashi”; //name的getter方法也可以这样写...4.property有关的语法     ​    ​1.自定义存取方法名     ​    ​    ​系统默认的存方法是setPropertyName, 默认的取方法是propertyName。...nonatomic: 线程不安全的;   我们可以简写属性,直接在接口文件中吧{}省略掉,直接用@property来定义方法,省去实现文件中的@synthesize, 访问属性时用_propertyName

    1.3K70

    Objective-C中NSInvocation的使用

    OC中调用方法某个对象的消息呦两种方式: #1. performanceSelector: withObject: #2. NSInvocation...., 但只传递2个参数, 这样方法的第三个参数会自动取我们传的第二个的值 [self performSelector:@selector(printStr1:Str2:Str3:) withObject...:signature]; //设置方法的调用者 invocation.target = self; //设置方法名, 这里一定要跟方法签名类中的方法名一致 invocation.selector...} 2、方法的参数个数与外界传进来的参数数组元素个数不符 //此处不能通过遍历参数数组来设置参数,因为外界传进来的参数个数是不可控的 //因此通过numberOfArguments方法获取的参数个数,是包含...self和_cmd的,然后比较方法需要的参数和外界传进来的参数个数,并且取它们之间的最小值 NSUInteger argsCount = signature.numberOfArguments - 2;

    74920

    iOS中setter方法 、getter方法、点语法、@property

    属性概念 属性是OC的一项特性,用于封装对象中的数据 OC对象通常会把其所需要的数据保存为各种属性 属性通过存取方法来访问(setter、getter) 例如:在Person类中定义了2个属性 通过...,是一个编译器的特性,编译器会把“点语法”转换为对存取方法的调用,使用点语法和直接调用存取方法的效果一致。...点语法在等号左边,那么编译器会自动转换为setter方法,点语法在等号右边或没有等号,那么编译器会自动转化为getter方法 Person *per = [[Person alloc]init];...除了生成存取方法之外,编译期还会自动向类中添加适当的类型的实例变量,并且在属性名前面加下划线,以此作为实例变量的名字 #import "Person.h" @implementation Person...,所有要拷贝一份不可变的字符串,确保对象中的字符串的值不会无意间变动) 方法名 getter=:指定获取方法的方法名, @property (nonatomic,getter=isOn) BOOL

    28110

    Objective-C中的Block(闭包)

    学习OC中的block之前也小担心一下,Block在OC中属于高级的部分,心里有又有个疑问:学起来难不难?...下面就通代码来认识一下OC中的block的使用。   ...,调用方法如下: 1 2 //调用代码块并接收返回值 int sum = sumBlock(20, 30); 4.把block当做参数传入函数 1 2 3 4 5 6 //把代码块作为函数参数 void...2.成员变量在block中的使用     ​    ​成员变量在block中的使用是加上self->a使用的,所以在声明成员变量的时候加不加__block,在成员函数中的代码块中都可以访问修改;     ​    ​...block修饰观察其变化 {     __block NSString *hasBlock;     NSString *noBlock; }   -(void)test;   @end     ​方法的实现

    1.5K90

    Objective-C中NSArray类的解读

    Objective-C中NSArray类的解读     NSArray数组类是Objective-C语言中常用的也是重要的一个类,除了开发中常用到的一些基础功能,NSArray及其相关类中还封装了许多更加强大的功能...NSArray中属性与方法: //获取数组中元素个数 @property (readonly) NSUInteger count; //通过下标获数组中的元素 - (ObjectType)objectAtIndex...:(NSUInteger)index; //初始化方法 - (instancetype)init; //通过C语言风格的数组创建NSArray对象 需要注意,C数组中需要为Objective对象,cnt...; //像数组中追加一个元素 这个方法会返回一个新的数组 - (NSArray *)arrayByAddingObject:(ObjectType)anObject; //像数组中追加一组元素...)useAuxiliaryFile; //将数组写入指定url路径 - (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically; //是数组中的所有元素调用某个方法选择器

    1.3K20

    Objective-C中的类目,延展,协议

    Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上。...一.Objective-C中的类目(Category)         在Objective-C比其他OOP的编程语言多了个类目,在OC中除了用继承来扩充类的功能函数外我们还可以用类目来实现。...二.Objective-C中的延展(Extension)         简单的说匿名类目就是延展,在延展中定义的方法是类私有的方法只能在类的内部调用,定义延展的方式就是把类目中括号中得名字省略掉,括号保留这就是延展...其实在延展中定义的方法不是真正的私有方法和C++, Java中得方法还有所区别,在类初始化的文件中引入相应延展的头文件,其延展对应的方法也是可以访问的。...把类中常用的方法抽象成OC中得协议,协议中只有方法的声明没有方法的实现,在protocol中可以把方法定义成@required(必须的):在使用协议的类中如果不实现@required的方法,编译器不会报错但会给出警告

    1.1K80
    领券