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

Objective-C集合

下面详细介绍Objective-C集合以及每个集合用法,学过其他面向对象编程语言小伙伴们看到OC集合会有种莫名亲切感,理解起来问题不大,可以类比Java集合去学习...在Objective-C集合主要包括不可变数组--NSArray,  可变数组--NSMutableArray,   不可变字典--NSDictionary,    可变字典--NSMutableDictionary...,必须先把数据类型转换成对象,然后再存入集合。...NSArray也是OC一个对象,使用NSArray也需要进行实例化,前面的博客在初始化中提到了便利初始化函数和便利构造器,在NSArray也少不了这两样东西我们可以通过NSArray便利初始化函数或者便利构造器进行...OC集合是不能放基本数据类型,那么我们如何把基本数据类型封装成对象呢?

1.1K70

Objective-CNSArray解读

Objective-CNSArray解读     NSArray数组Objective-C语言中常用也是重要一个,除了开发中常用到一些基础功能,NSArray及其相关还封装了许多更加强大功能...NSArray属性与方法: //获取数组中元素个数 @property (readonly) NSUInteger count; //通过下标获数组元素 - (ObjectType)objectAtIndex...:(NSUInteger)index; //初始化方法 - (instancetype)init; //通过C语言风格数组创建NSArray对象 需要注意,C数组需要为Objective对象,cnt...参数为C数组长度 //如果cnt值小于C数组长度,则会对C数据进行截取赋值,如果大于则程序会崩溃 - (instancetype)initWithObjects:(const ObjectType...C数组 objects参数需要为分配好空间C指针 - (void)getObjects:(ObjectType __unsafe_unretained [])objects range:(NSRange

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

c++两个互相引用问题

原因分析:         因为class AB声明依赖于class B前置声明,而不是#include "B.H",所以B定义对A来说不可见,所以无法调用析构函数,导致内存泄露。...解决方案: 此种状况解决利用前置声明定义那个保持另外一个引用定义为指针,定义指针时不需要对那个定义可见。...“warning C4150: 删除指向不完整“B”类型指针;没有调用析构函数”       而且另外一个问题是在该.h文件不能使用该指针调用这个成员,原因也是定义不可见。                ...“error C2227: “->haha”左边必须指向/结构/联合/泛型类型” 解决方案:       此时需要将A.h所有成员函数实现重新定义一个.cpp文件,然后该.cpp文件去#include...指针成员头文件声明,此时定义可见,即可定义析构函数,调用指针成员了。

1.2K20

c++两个互相引用问题

原因分析:         因为class AB声明依赖于class B前置声明,而不是#include "B.H",所以B定义对A来说不可见,所以无法调用析构函数,导致内存泄露。...解决方案: 此种状况解决利用前置声明定义那个保持另外一个引用定义为指针,定义指针时不需要对那个定义可见。...“warning C4150: 删除指向不完整“B”类型指针;没有调用析构函数”       而且另外一个问题是在该.h文件不能使用该指针调用这个成员,原因也是定义不可见。                ...“error C2227: “->haha”左边必须指向/结构/联合/泛型类型” 解决方案:       此时需要将A.h所有成员函数实现重新定义一个.cpp文件,然后该.cpp文件去#include...指针成员头文件声明,此时定义可见,即可定义析构函数,调用指针成员了。

1.8K50

c++两个互相引用问题

原因分析:         因为class AB声明依赖于class B前置声明,而不是#include "B.H",所以B定义对A来说不可见,所以无法调用析构函数,导致内存泄露。...解决方案: 此种状况解决利用前置声明定义那个保持另外一个引用定义为指针,定义指针时不需要对那个定义可见。...“warning C4150: 删除指向不完整“B”类型指针;没有调用析构函数”       而且另外一个问题是在该.h文件不能使用该指针调用这个成员,原因也是定义不可见。                ...“error C2227: “->haha”左边必须指向/结构/联合/泛型类型” 解决方案:       此时需要将A.h所有成员函数实现重新定义一个.cpp文件,然后该.cpp文件去#include...指针成员头文件声明,此时定义可见,即可定义析构函数,调用指针成员了。

1.1K20

objective-C 内存管理之-引用计数

obj-c本质就是"改进过c语言",大家都知道c语言是没有垃圾回收(GC)机制(注:虽然obj-c2.0后来增加了GC功能,但是在iphone上不能用,因此对于iOS平台程序员来讲,这个几乎没啥用...),所以在obj-c写程序时,对于资源释放得由开发人员手动处理,相对要费心一些。...每个对象(特指:实例)内部都有一个retainCount引用计数,对象刚被创建时,retainCount为1,可以手动调用retain方法使retainCount+1,同样也可以手动调用release...方法使retainCount-1,调用release方法时,如果retainCount值减到0,系统将自动调用对象dealloc方法(类似于c#dispose方法),开发人员可以在dealloc释放或清理资源...,同时retainCount减到0时,是否会自动执行dealloc函数 nil 问题: 1.1 如果仅声明一个Sample类型变量(其实就是一个指针),而不实例化,其初始值为nil 1.2 变量实例化以后

805100

Objective-C属性机制

Objective-C 2.0属性机制为我们提供了便捷获取和设置实例变量方式,也可以说属性为我们提供了一个默认设置器和访问器实现。...@protected :受保护,该实例变量只能在该类和其子类内访问,父protected实例变量在子类是private默认是protected;         3....@private: 私有的,该实例变量只能在该类内部访问;         因为要用protected 或者 private来隐藏内部细节,用或者对象是没法直接访问被隐藏细节,所以要用getter... 在实现文件我们用@synthesize来实现,用@synthesize来修饰相应变量就起到getter 和 setter 方法实现作用。...:决定了以何种方式对数据成员赋予新值     strong : 表示强引用关系,即拥有对象所有权。

1.3K70

Objective-C面试常见问题

记录自己未曾搞懂Objective-C问题,逐题补全。...线程同步对数据加锁会有一定系统开销 二、Cocoa Operations 优点:不需要关心线程管理,数据同步问题,可以把精力放在自己需要执行操作上 三、GCD 优点: GCD基于CAPI,非常底层...一般情况下,在响应者链,只要有对象处理事件,事件就停止传递,但有时候,可以在视图响应方法根据一些条件判断来决定是否需要继续传递事件。...一定是一个方法 一定有返回值 返回值类型 (id, instancetype) 便利构造器:+号方法 和自定义初始化方法区别 自定义初始化方法(init) 初始化+赋值 遍历构造器: 开辟空间+...初始化+赋值 Block block是OC闭包形式 block来源:C语言 已经被弃用一个观点:goto 解决block循环引用:用__weak来修饰 如何修改block内变量:__block

58930

Objective-C语法糖

当时把注意力放在了深浅拷贝内存地址分析上了,就没太在意,测试做完啦,在回顾时候发现数组是用下标的方式获取! 于是就有了个疑问,在OC这样写也行?...为了更好偷懒,于是去百度上Google啦一下这是‘ Xcode 4.4LLVM compiler 4.0’ 引入新特性(2012年WWDC发布东西)。...ludashi~走起~(虽然是12年东西,这不刚学蛮~在OC中用感觉挺新鲜,简化后对字典初始化感觉和PHP有点相似~感觉见到亲人啦~)   问题是数组引起那么就从数组开始吧   1.一般数组初始化和访问数组元素是这样...    也引用我之前博客得一段代码吧 //不可变字典初始化 NSDictionary *dictionay = [NSDictionary dictionaryWithObjectsAndKeys...NSNumber *c = @('a'); NSLog(@"a = %@, b = %@, c = %@", a, b, c);

96550

Objective-Cruntime机制应用

Objective-Cruntime机制应用 一、初识runtime         Objective-C是一种动态语言,所谓动态语言,是在程序执行时动态的确定变量类型,执行变量类型对应方法...因此,在Object-C中常用字符串映射技巧来动态创建对象。因为OC动态语言特性,我们可以通过一些手段,在程序运行时动态更改对象变量甚至方法,这就是我们所说runtime机制。...,你或许会遇到一个问题,ARC下,编译器不允许你将int类型值赋值给id,在buildset中将Objective-C Automatic Reference Counting修改为No即可。...六、动态添加方法         这个runtime机制最强大部分要到了,试想,如果我们可以动态添加方法,那将是一件多么令人激动事情,注意,这里是动态添加,和类别的最大不同在于这种方式是运行时才决定是否添加方法...七、做点小手脚         程序员总是得寸进尺,现在,我们要做点事情,用我们函数替换掉函数: - (void)viewDidLoad {     [super viewDidLoad];

38450

Objective-C继承和多态

OC中和Java类似,不支持多重继承,但OOP语言C++就支持多继承,为什么OC不支持多继承稍后将会提到。    说到继承呢,想到了一本书上是引用《大话西游》里一句话来描述继承。...在Objective-Csuper是指向直接父指针,而self是指向本身指针,self就相当于javathis指针。...在Objectiv-C几乎所有的都是继承自NSObject,NSObject存在大量功能强大方法。下面对NSObject各种方法进行试验和介绍:         1....= str1"); }     ​    ​Objective-C继承         继承是is-a关系,比如猫咪是一个动物,那么动物是父,而猫咪是动物子类。...2014-07-30 08:38:12.958 HelloOC[483:303] 我是富二代BILL`s son,我超喜欢飙车 ​Objective-C多态     ​    ​多态简单说就是对于不同对象响应同一个方法时做出不同反应

1.1K80

Objective-CBlock(闭包)

小伙伴们如果没大看懂下面的东西,请去上面的博客中进一部了解一下block.  1.局部变量可变对象和不可变对象在block引用             下面会提供一部代码,这部分代码功能是定义两个局部变量...,一个是可变对象,一个是不可变对象,然后再定义一个Block, 在block引用两个局部变量。...上面提到了在代码块可以引用局部变量但是不可以更改其值,除非在声明时候加上__block关键字。             ...如果要想block和不可变局部变量绑定的话,我们要加上_block         还是引用上面博客一段话来做一下总结吧: 对值类型修改,如果block初始化后,无法同步到block内部...对于成员变量修改都是通过对象self指针引用来实现。 block内部对于成员变量访问也是通过block结构体对象成员self 指针引用来实现

1.4K90

Objective-C类目,延展,协议

Objective-C类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛,瞬间感觉OC好高大上。...一.Objective-C类目(Category)         在Objective-C比其他OOP编程语言多了个类目,在OC除了用继承来扩充功能函数外我们还可以用类目来实现。...友元就是非本类方法可以使用本类得变量,这也是对方法一个扩充,个人感觉在OC得类目和C++友元有着异曲同工之妙(仅代表个人观点,欢迎批评指正),下面我们就来详细学习一下OC得类目吧。         ...二.Objective-C延展(Extension)         简单说匿名类目就是延展,在延展定义方法是私有的方法只能在内部调用,定义延展方式就是把类目中括号得名字省略掉,括号保留这就是延展...其实在延展定义方法不是真正私有方法和C++, Java得方法还有所区别,在初始化文件引入相应延展头文件,其延展对应方法也是可以访问

98980

Objective-C单例模式

​    ​单例模式算是设计模式中比较简单一种吧,设计模式不是只针对某种编程语言,在C++, Java, PHP等其他OOP语言也有设计模式,笔者初接触设计模式是通过《漫谈设计模式》了解。...不过在23种设计模式里面单例模式还是算比较好理解, 那么在OC又是怎么来表示单例模式呢?下面会结合着代码,理解一下OC得单例模式。     ​    ​...首先得了解什么是单例模式,用大白话说,单例模式就是在程序这个只对应着一个实例,这就是单例模式,单例模式一般用全局静态对象来实现。...下面我们会建立一个生成单例SingletonClass,在实现文件定义各种方法来实现我们单例模式。     ​    ​...重写release,autorelease, retain方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //重写retain,引用计数不变 -(id) retain

1.8K70
领券