Objective-c知识小结

1.创建一个类产生.h和.m两个文件,.h中对用到的变量、方法作声明,.m文件中实现,导入时只导入.h文件,如果直接把方法写在.m文件中,未在.h文件中进行声明,则是私有方法

[email protected] 类名 :NSObject  @end,代表声明一个类,冒号表示继承,不可省,要使用OC中常用的类,那么#import <Foundation/foundation.h>,Foundation框架内有个foundation.h文件,其中包括NSObject。

3.- (int) getAge;声明函数,-代表动态方法,即有对象才调用的方法,声明静态方法前用+ 方法后有几个冒号就有几个参数,类型用括号括住 4.实现方法时方法名后不带括号

5.创建类的对象,先调用静态方法alloc分配内存:[类名 alloc],Student *stu=[Student alloc],OC对象一定是指针

6.开发中这样创建对象,Student *stu=[[Student alloc] init];构造方法init用于初始化,可自己编写 7.调用对象方法,[对象名 方法] 8.自己写一个构造方法(动态的),方法名以init开头,自定义构造方法首先要调用父类构造方法(原因很简单),[super init]

9.%@占位符代表打印一个对象,打印对象会调用description方法

10.所有的OC对象都要用指针来指向它,定义一个字符串,NSString *[email protected]”itcast”; 11.成员变量前要加下划线,_age,_number,默认的规则 12.点语法的本质是调用set方法和get方法

12.当编译器遇到@property时,会自动展开get方法和set方法的声明 [email protected] age,height,number,实现三个变量的方法 14.给对象发送某条消息相当于调用该对象的该方法 15.类名和*是离不开的,除非继承声明时 16.如果自己手动实现了getter和setter,xcode就不会自动生成@synthesize,也就不会自动生出下划线的变量

17.类内部定义的变量默认作用域是protect的,只能在类内部和子类中访问,提供get方法和set方法供外部访问

18.动态方法内部的self是指调用当前对象,静态方法内的self是指类名 19.在.h文件中声明的方法是公共方法,不声明而直接写在.m文件中的方法是私有方法,只有.m文件中能使用该方法

20.stu.age=100本质是调用了set方法,int age= stu.age本质调用了get方法

21.Student *stu=[Student new]相当于Student *stu=[[Student alloc] init],但前者不能调用自己写的构造方法

22.在.m文件中用了@synthesize,那么在.h文件中的成员变量定义可省略,因为该变量会在.m文件中自动生成,但是是私有的

[email protected] age;默认访问与age同名的变量,如果找不到则自动生成

[email protected] age = _age,代表getter和setter会去访问_age,如果没有_age也会自动生成。那为啥不直接@synthesize _age啊我去

25.Xcode4.5之后的版本,如果在.h文件中使用@property age,则会在.m文件中自动生成@synthesize,即自动生成getter和setter,默认访问的是_age变量(也是自动生成)

26.Xcode关闭arc:在开发中的项目在项目设置的build setting中搜索garbage关键字就可以看到这个选项了,然后选择NO再次运行各种release就不会报警了

27.验证dealloc方法是否被使用时需要重写父类的dealloc方法,[super dealloc]; 28.OC注释:pragma mark,好处是可以快速定位注释位置

29.指向已经释放的内存的指针叫野指针,没有指向任何的东西指针叫空指针,OC中野指针会报错,空指针不会报错

30.set方法的内存管理:只针对参数是对象的set方法,参数是变量的不涉及内存管理

31.Student的set方法的参数是类Book的对象时,类Book产生了book对象后要自己释放掉,Student产生的对象stu第一次使用该book对象时要在set方法中对book做retain操作:_book =[book retain],在dealloc方法中对book作release操作:[_book release],第二次使用book2对象要先在set方法中作release,赋值后再做retain,则可多次使用,该操作要先判断当前对象与参数是否相同,一般这样写:

if(_book!=book){ [_book release];  _book=[book retain];} 这样写的原因再次看视频,语言不好表达 32.retainCount方法获取 对象当前计数器的值

33.在.h文件中声明对象时用到某个类,用@class关键字声明,在.m文件中实现时再用import导入,这样可提高编译性能

34.两个类互相拥有对方时,只能用@class而不能用import,原理是C语言两个文件中不能互相拥有

35.property参数,retain,作用是实现方法时会release旧值,再retain新值

36.property参数,默认是readwrite,代表既生出get方法又set方法,写readonly时只生出get方法

37.property参数,默认是atomic,提供方法多线程调用,给get方法和set方法加锁,保证线程安全,nonatomic代表方法不需要考虑线程安全(禁止多线程调用,可提高性能)

38.语法:property(nonatomic,retain)Book *book;代表book的两个方法不加锁,且需要管理内存

39.getter和setter也可作为property参数,getter = what ,代表getter的方法名是what 40.[stu autorelease]不会改变对象的计数器值,只是将stu添加到自动释放池中 41.自动释放池被销毁时,里面的所有对象都会调用release方法计数器减一 42.常用写法Student *stu = [[[Student alloc] init] autorelease]; 43.写一个静态方法快速创建对象,方法名最好与类名相同

44.系统自带的类如NSString,都是已经autorelease的,不需要再进行autorelease操作

45.静态方法创建的对象都是自动释放的,自己创建的静态方法(如快速创建对象)需要在方法实现中调用autorelease方法

46.静态方法不能访问对象的成员变量

47.垃圾回收机制:完全不用管理内存                                                              ARC:编译器自动生成管理内存的代码

48.不要把大量循环的代码放在同一个自动释放池中,浪费内存 49.尽量不要把占用内存大的对象放入自动释放池

50.Category,可以在不改变已经存在的一个类的前提下为该类添加一个新的方法,相当于该类的拓展

51.类名后面有冒号代表继承,类名后面有括号代表分类,括号里是分类名称 52.分类只能扩展方法,不能增加成员变量

53.Protocol相当于JAVA中的接口,但其中声明的方法可以不全部实现 54.类名(或协议)后面有<>代表实现某个协议,一般是NSObject 55.只有实现了某个协议的对象才能充当按钮的监听器

56.Block:将一段代码封装到block中,可在任何时候调用这段代码

时间: 2024-10-07 13:51:52

Objective-c知识小结的相关文章

awk基础知识小结(1)

1.使用规则 awk 适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行需要特殊技巧程序设计. awk  的语法较为常见.它借鉴了某些语言的一些精华部分,如C 语言.python 和 bash. 第一个 awk 让我们继续,开始使用 awk,以了解其工作原理.在命令行中输入以下命令: $ awk '{ print }'  /etc/passwd 您将会见到 /etc/passwd 文件的内容出现在眼前.现在,解释 awk 做了些什么.调用 awk 时,我们指定  /etc/passwd

awk基础知识小结(2)

10.循环结构循环结构awk 的 while 循环结构,它等同于相应的 C 语言 while 循环.awk 还有 "do...while" 循环,它在代码块结尾处对条件求值,而不象标准 while 循环那样在开始处求值.它类似于其它语言中的 "repeat...until" 循环.示例:do...while 示例 {     count=1     do {    print "I get printed at least once no matter w

C/C++ 位域知识小结

C/C++ 位域知识小结 几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存对齐全攻略–涉及位域的内存对齐原则 本文主要对位域相关知识进行了一下梳理,参考如下: C语言中的位域 史上最全的C位域总结2 C结构体之位域(位段) C/C++中以一定区域内的位(bit)为单位来表示的数据成为位域,位域必须指明具体的数目. 位域的作用主要是节省内存资源,使数据结构更紧凑. 1. 一

suid知识小结

1.1.1 suid知识小结:针对命令和二进制程序 1)用户或属主对应的前三位权限的x位上如果有s就表示suid权限.当x位上没有小写x执行权限的时候,suid的权限显示的就是大S. 2)suid作用是让普通用户可以以root(或其他)的用户角色运行只有root(或其他)账号才能运行的程序或命令,或程序命令对应本来没有权限操作的文件等.(注意和su及sudo的区别),suid为某个命令设置特殊权限(使用者为所有人).通过给rm命令设置suid加深学生对suid的理解. 3)问题:希望oldboy

javascript之正则表达式基础知识小结

javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料. 元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要用“\”来进行转移. 如果记不清楚那些标点符号需要转移,可以在使用标点符号时都使用反斜杠“\” 简单匹配 1.直接量 /javascript/ 匹配带有“javascript”的字符串 比如“javascript is an object-oriented scripting language” 2.[

Android app开发知识小结

Android知识小结 这是一个知识的总结,所以没有详解的讲解. 一.分辨率Android中dp长度.sp字体使用.px像素.in英寸.pt英寸1/72.mm毫米 了解dp首先要知道density,density是一个抽象的单位,density值表示每英寸有多少个显示点,与分辨率是两个概念QVGA屏density=120         QVGA(240*320)HVGA屏density=160         HVGA(320*480)WVGA屏density=240        WVGA(

关闭selinux知识小结

今天有人问我,哎,福星,关闭selinux这块我还有点蒙,能给我分析分析么? selinux是什么? 1.     我的简单理解:selinux是一套安全的机制,在学习环境下建议关闭,功能方面可以一些机制所替代.比如防火墙等系列安全措施 selinux一定要关闭么? 1.     没有基础又不愿意倘坑的小伙伴可以关闭,工作中环境大都不开启 2.     开启的坏处是使用中需要倘很多的坑,如果有面对困难的勇气,那就别管它 修改selinux运行状态的相关 setenforce  1 | 0    

Linq知识小结

Linq语法小结:有两种形式的语法可供我们在写Linq查询时使用,分别是“查询语法”.“方法语法”.1)先看个列子,有个直观认识     int[] arr = { 12, 2,45,34,23,18,4};     //查询语法形式(推荐使用这种).返回的是一个可枚举类型     IEnumerable<int> results = from temp in arr                                where temp > 20              

180531-Spring中JavaConfig知识小结

原文链接:Spring中JavaConfig知识小结/ Sring中JavaConfig使用姿势 去掉xml的配置方式,改成用Java来配置,最常见的就是将xml中的 bean定义, scanner包扫描,属性文件的配置信息读取等 I. 几个基本注解 1. Configuration注解 在javaConfig中注解@Configuration用来代替一个xml文件,可以简单的理解他们的作用是相等的,一般bean的定义也都是放在被这个注解修饰的类中 如一个基本的配置文件如下 @Configura

C++ STL 知识小结

qwq...接近联赛,就在这里对STL做一点知识小结吧,因为STL曾经失分很多. 简介 (来自Baidu) STL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R Musser在惠普实验室工作时所开发出来的.从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合.这里的“容器”和算法