Objective-C知识总结(4)

ARC(automatic reference counting)机制

判断是否是ARC机制

  • ARC机制中不能使用retain release autorelease retainCount
  • 在dealloc方法中不能使用 [super dealloc];

在ARC下对象释放的判断依据: 对象没有强指针指向

指针默认的都是强指针,比如我们创建的对象都是默认的强指针

Person *p1 = [[Person alloc] init];

__strong 修饰符,修饰这个指针是一个强指针,也可以不写

__weak   修饰的这个指针是弱指针

ARC下的循环引用问题

当两个对象互相拥有的时候,如果定义的时候都用strong,那么就会导致循环引用的问题,双方互相强指针指向,不能被释放

解决这个问题的方法是:将其中一个以weak定义,就能完美解决这个问题了

ARC下set方法内存@property参数

ARC中的@property

strong:用于OC对象,相当于MRC中的retain

weak:用于OC对象,相当于MRC中的assign(代理一般用weak,UI控件一般用weak)

assign:用于基本数据类型,跟MRC中的assign一样

copy:一般用于NSString,跟MRC中的copy一样

ARC注意:

__weak Person *p=[[Person alloc] init];
// 不合理,对象一创建出来就被释放掉,对象释 放掉后,ARC把指针设置为nil。 

如何让ARC的项目兼容非ARC的类

让程序兼容ARC和非ARC部分

  • 转变为非ARC -fno-objc-arc
  • 转变为ARC的, -f-objc-arc

在哪里添加编译器标示 -fno-objc-arc如下图

将MRC转化为ARC(不建议这么使用,若要尝试做好备份)

分类(Category)

分类的使用注意事项:

--------->在分类的声明中不能声明实例变量

--------->不能定义实例变量 也不能使用 @property

--------->在分类的方法中,可以访问类中的实例变量

--------->在分类中存在和类同名的方法  优先访问的时 分类中 的方法

当在多个类别中有同名的方法的时候,这时候,执行的最后编译的那个类别的同名方法

分类的 > 原类

最后编译的分类 >  其他的分类

分类(Category)非正式协议

非正式协议就是给NSObject类或Foundation框架中的子类创建的类目(分类),即给它们添加方法,叫做非正式协议

类的延展的概念

延展类别又称为扩展(Extendsion)

Extension是Category的一个特例 其名字为匿名(为空),并且新添加的方法一定要予以实现。(Category没有这个限制)

// 这个一般用在.m文件中,作为私有的方法和成员变量

@interface Student ()
{
   // 可以添加成员变量
}

// 添加方法

@end 
时间: 2024-12-14 03:32:37

Objective-C知识总结(4)的相关文章

【基础知识】列一下一个.Net WEB程序员需要掌握的知识

基础部分 C# 基础语法 OOP的概念,面向对象的理解 继承 封装 多态 ASP.NET MVC (Web Form 用的越来越少,如果你不熟悉,可以不看) JavaScript 基础语法 如何在HTML里使用JavaScript 常用Dom 操作 SQL Server 常用T-SQL 增删改查 SQL Managment studio 常用操作 jQuery 常用API HTML HTML 所有标签的语义,什么时候用什么标签 CSS 常用CSS的知识,如何在HTML使用 常用的布局 Boots

iOS面试必备-iOS基础知识

近期为准备找工作面试,在网络上搜集了这些题,以备面试之用. 插一条广告:本人求职,2016级应届毕业生,有开发经验.可独立开发,低薪求职.QQ:895193543 1.简述OC中内存管理机制. 答:内存管理机制:使用引用计数管理,分为ARC和MRC,MRC需要程序员自己管理内存,ARC则不需要.但是并不是 所有对象在ARC环境下均不需要管理内存,子线程和循环引用并不是这样.与retain配对使用的是release,retain代表引用计 数+1,release代表引用计数-1,当引用计数减为0时

Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发人员需要了解什么?)

Qt/C++开发人员眼中的Obj-C 对于我们第一次自己定义iOS应用来说,对于来自Qt/C++开发人员来说,我不得不学习Objective-C相关语法与知识 为了让读者可以更easy理解这篇博客的内容,我将描写叙述诸多我所学到的东西.这将很多其它的是大脑转存而不是单一的教程 ,所以我仍然希望这将对你非常有帮助,我将首先写编程语言的差异,然后再写关于类库的差异 1.Objective C vs C vs C++ 类似于C++,Obj-c是C语言的一个超集(这不是100%正确的,可是一个足够好的语

刨根问底Objective-C Runtime

http://chun.tips/blog/2014/11/05/bao-gen-wen-di-objective%5Bnil%5Dc-runtime-(2)%5Bnil%5D-object-and-class-and-meta-class/ 刨根问底Objective-C Runtime(1)- Self & Super 刨根问底Objective-C Runtime(2)- Object & Class & Meta Class 刨根问底Objective-C Runtime(

iOS/OS X线程安全的基础知识

处理多并发和可重入性问题,是每个库发展过程中面临的比较困难的挑战之一.在Parse平台上,我们尽最大的努力保证你在使用我的SDKs时所做的操作都是线程安全的,保证不会出现性能问题. 在这篇文章中我们将会复习一些关于如何以简洁.安全.干净的方式处理多并发和竞争条件下的基本概念. 首先,在进入细节讨论之前,我们先定义以下概念: 线程:它是操作系统执行的一个上下文程序,并且可以同时 存在多个线程. 并发性:在程序运行过程中,多个线程执行时共享同一资源的现象. 可重入性: 通过显式递归,软件/硬件中断,

为React Native开发写的JS和React入门知识

来自Leo的原创博客,转载请著名出处 我的stackoverflow 前言 想来想去,还是需要写一篇文章来介绍下JavaScript和React的基本知识.最初开发ReactNative的时候,完全没接触过React,大学那会简单学了点JS.毕业后一直在某五百强外企上班.做的东西也乱七八糟的,搞过大数据,搞过物联网,不过看我博客的同学应该知道,我对iOS和Android还是比较喜欢的.所以,博客都是写的都是移动端的东西.好像扯的有点多了,本文的目的就是为了那些JS和React小白提供一个快速入门

Deep Reinforcement Learning 基础知识(DQN方面)

Introduction 深度增强学习Deep Reinforcement Learning是将深度学习与增强学习结合起来从而实现从Perception感知到Action动作的端对端学习的一种全新的算法.简单的说,就是和人类一样,输入感知信息比如视觉,然后通过深度神经网络,直接输出动作,中间没有hand-crafted工作.深度增强学习具备使机器人实现完全自主的学习一种甚至多种技能的潜力. 虽然将深度学习和增强学习结合的想法在几年前就有人尝试,但真正成功的开端是DeepMind在NIPS 201

Deep learning:一(基础知识_1)

前言: 最近打算稍微系统的学习下deep learing的一些理论知识,打算采用Andrew Ng的网页教程UFLDL Tutorial,据说这个教程写得浅显易懂,也不太长.不过在这这之前还是复习下machine learning的基础知识,见网页:http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=DeepLearning.内容其实很短,每小节就那么几分钟,且讲得非常棒. 教程中的一些术语: Model repr

Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发者需要了解什么?)

Qt/C++开发者眼中的Obj-C 对于我们第一次自定义iOS应用来说,对于来自Qt/C++开发者来说,我不得不学习Objective-C相关语法与知识 为了让读者能够更容易理解这篇博客的内容,我将描述诸多我所学到的东西.这将更多的是大脑转存而不是单一的教程 ,所以我仍然希望这将对你很有帮助,我将首先写编程语言的差异,然后再写关于类库的差异 1.Objective C vs C vs C++ 类似于C++,Obj-c是C语言的一个超集(这不是100%正确的,但是一个足够好的语句来理解它),您将使

转载 Deep learning:一(基础知识_1)

前言: 最近打算稍微系统的学习下deep learing的一些理论知识,打算采用Andrew Ng的网页教程UFLDL Tutorial,据说这个教程写得浅显易懂,也不太长.不过在这这之前还是复习下machine learning的基础知识,见网页:http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=DeepLearning.内容其实很短,每小节就那么几分钟,且讲得非常棒. 教程中的一些术语: Model repr