#import是一个预处理指令,作用跟C语言的#include类似,都是 包含(拷贝)某个文件的内容 到 预处理指令所在的位置. #import <Foundation/Foundation.h>表示包含Foundation框架中的Foundation.h文件。
在C\C++中,我们用#include来包含头文件,缺点就是同一个头文件可能被包含多次。在OC中,就使用#import来包含头文件,优点是可以自动防止同一个头文件被包含多次。#import <...>表示包含系统自带的文件,#import "..."表示包含开发人员自己创建的文件.
1.创建一个类产生.h和.m两个文件,.h中对用到的变量、方法作声明,.m文件中实现,导入时只导入.h文件,如果直接把方法写在.m文件中,未在.h文件中进行声明,则是私有方法 2.@interface 类名 :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 *str=@”itcast”; 11.成员变量前要加下划线,_age,_number,默认的规则 12.点语法的本质是调用set方法和get方法 12.当编译器遇到@property时,会自动展开get方法和set方法的声明 13.@synthesize 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文件中自动生成,但是是私有的 23.@synthesize age;默认访问与age同名的变量,如果找不到则自动生成 24.@synthesize 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中,可在任何时候调用这段代码
wifi密码85205233
cd Desktop/ 进入桌面
touch xxx.m 创建文件
open xxx.m 打开文件
cc -c xxx.m 编译
cc xxx.o 链接
cc xxx.o -Framework Foundation 链接
cc one.o two.o -framework Foundation 多个文件编译
ls -l *nix命令,以长格式的形式查看当前目录下所有文件。
./a.out 输出文件 a.out 是linux/unix环境下gcc编译源代码(c/c++)并连接产生的默认执行文件名。
./a.out表示当前目录下的a.out文件。一个单独的点号指代当前文件路径。
因为linux/unix搜索可执行文件的默认路径需要指定,
没有./两个符号指定路径的话,新编译的文件操作系统找不到。
clear 清屏
typedef enum{
XX**;
XX**;
} XX; //创建一个枚举类型
typedef struct{
}XXX; //创建一个结构体
typedef 声明,为现有类型创建一个新的名字。
类方法是 +开头 只能由类来调用
对象方法是 -开头 只能由对象调用
类方法相当于java的静态方法
self 相当于java的this
#pragma mark - 加-会有线 注释
@property 生成set,get方法的声明
@synthesize 生成set,get方法的实现
引用计数器操作
给对象发送一条retain消息,可以使引用计数器值+1(retain方法返回对象本身)
给对象发送一条release消息,可以使引用计数器值-1
可以给对象发送retainCount消息获得当前的引用计数器值
当对象被销毁时,系统会发一条dealloc 用于重写
garbage 野指针: 指向 僵尸对象(不可用内存)的指针
nil相当于java的 null
oc不存在空指针错误,给空指针发送消息,不报错
edit Scheme ->Diagnostics->勾选 Enable zombie objects (检测僵尸对象)
set方法
if(_car != car){
[_car release];
_car = [_car retain];
}
/*
1.set方法内存管理相关的参数
* retain : release旧值,retain新值(适用于OC对象类型)
* assign : 直接赋值(默认,适用于非OC对象类型)
* copy : release旧值,copy新值
2.是否要生成set方法
* readwrite : 同时生成setter和getter的声明、实现(默认)
* readonly : 只会生成getter的声明、实现
3.多线程管理
* nonatomic : 性能高 (一般就用这个)
* atomic : 性能低(默认)
4.setter和getter方法的名称
* setter : 决定了set方法的名称,一定要有个冒号 :
* getter : 决定了get方法的名称(一般用在BOOL类型)
*/
两个类互相包含的时候会导致循环引用 : A申明B.h B申明A.h
循环引用解决:
@class仅仅告诉编译器,A是一个类 (提交编译效率)
1>在.h文件中用@class来声明类
2>在.m文件中用#import来包含类的所有东西
#import是拷贝 用这个会降低编译效率 (例子:假如你有100个类引用了A. 如果A有一点更改,那么这100个类都需要重新编译一次)
3.两端循环引用解决方案
1>一端用retain
2>一端用assign
ARC的判断准则: 只要没有强指针指向对象,就会释放对象
指针分两种:
1>强指针:默认情况下,所有的指针都是强指针 __strong
2>弱指针: __weak
1.ARC特点
1>不允许调用 release,retain,retainCount
2>允许重写dealloc 但不允许调用[super dealloc]
3>@property的参数
* strong : 成员变量是强指针, 相当于原来的retain(适用于OC对象类型)
* weak : 成员变了是弱指针, 相当于原来的assign (适用于oc对象类型)
* assign : 适用于飞oc对象类型
当两端循环引用的时候,解决方案:
一端用strong,一端用weak
搜auto可以查看是否是arc模式
-fno-objc-arc(arc模式下)设置类不是arc模式
-f-objc-arc (非arc模式下)表示需要arc
block用来保存一段代码
block的标志 ^
block跟函数很像
1.可以保存代码
2.有返回值
3.有形参
4.调用方式一样
block内部可以访问外面的变量
默认情况下,block内部不能修改外面的局部变量
局部变量只有前面加上__block关键字。这个局部变量就可以在内部修改.:__block int b = 30;
返回类型 (^名称)(int,int) = ^(int a,int b){
return a+b;
};
int (^名称)();
名称 = ^{return int};
typedef int (^MyBlock) (int int);
protocol
只要一个类遵守了某个协议,就能拥有这份协议中所有方法申明
1.协议的定义
@protocol 协议名称 <NSObject>
//方法声明列表
@end
2.如何遵守协议
1>类遵守协议
@interface 类名 : 父类名 <协议名称1,协议名称2>
@end
2>协议遵守协议
@protocol 协议名称<其他协议名称1,其他协议名称2>
@end
3.协议中方法声明的关键字
@required 要求实现,不实现就会发出警告(默认)
@optional 不要求实现
4.定义一个变量的时候,限制这个变量保存的对象遵守某个协议
类名 <协议名称> *变量名;
id <协议名称> 变量名;
NSObject<MyProtocol> *obj;
id<MyProtocol> obj2;
5,@property中声明的属性也可以用做一个遵守协议的限制
@property(nonatomic,strong) 类名 *属性名;
@property(nonatomic,assign) 类名 属性名;
6.协议可以定义在单独.h文件中,也可用定义在某类中
1>如果这个协议只用在某个类中,应该把协议定义在类中
2>如果这个协议只用在很多类中,应该把协议定义在单独文件中
7.分类可以定义在单独.h文件中,也可用定义在原来类中
一般情况下都是定义在单独文件中
NSRange
NSPoint\CGPoint
NSSize\CGSize
NSRect\CGRect
当Range.location在字符串中不存在就 == NSNotFound
相关推荐
以上内容仅为OC学习笔记合集中的部分知识点概述,深入学习将涵盖更多主题,如Delegation、Design Patterns、网络编程、动画效果、Core Animation等。通过不断实践和探索,你将能够熟练掌握Objective-C,并能构建出...
这份"iOS史上最全的OC笔记"无疑是学习OC语言的重要参考资料。以下是对笔记内容的详细解读: 1. **基础概念**:OC是C语言的超集,它引入了消息传递机制和动态类型,使得代码更具灵活性。笔记会详细解释类、对象、...
Zemax宏学习笔记1 Zemax是一种光学设计软件,它提供了强大的宏功能,用户可以通过编写宏脚本来自动化设计过程,提高工作效率。下面是Zemax宏学习笔记的相关知识点: 一、基本概念 * Zemax宏语言使用类似BASIC的...
这篇笔记主要介绍了Objective-C的一些基础知识,包括以下几个方面: ...这些都是OC初学者需要掌握的基础知识,为后续学习OC打下基础。笔记讲解很细致,结合了大量实例代码,非常适合初学者阅读和学习。
多线程学习笔记 iOS开发中,多线程是一种常见的技术手段,用于优化应用程序的性能,提升用户体验。多线程的核心是让程序能够并发地执行多个任务,合理地利用设备的计算能力,尤其是在拥有多个核心的处理器上。 ...
代码中是JSPatch学习笔记的UI基础部分,其中包括以下内容: 1. 项目环境配置 2. 变量 * 局部变量 * 全局变量 * 使用OC中的枚举类型 `Objective-C 里的常量不能直接在 JS 上使用,可以直接在 JS 上用具体值代替,...
本笔记将深入探讨cocos2d-oc的核心概念、关键特性和实际应用,帮助开发者从零开始掌握这一强大的游戏引擎。 一、cocos2d-oc简介 cocos2d-oc是基于Objective-C的Cocos2d引擎版本,它提供了丰富的图形绘制、动画制作...
本压缩包提供的学习资料涵盖了OC语言的基础到高级特性,结合代码实例和详细笔记,是iOS开发者深入理解OC语言的宝贵资源。 一、Objective-C基础 Objective-C是C语言的超集,它引入了面向对象的概念,如类、对象、...
"STM32学习笔记" STM32学习笔记第五篇:通用定时器PWM输出 STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4...
1. **OpenCore引导加载器**:OpenCore是目前非常流行的黑苹果引导工具,它取代了早期的Clover,提供了更加现代和灵活的配置方式。OpenCore支持最新的macOS版本,并且有强大的硬件兼容性,可以处理复杂的配置需求。 ...
这篇“Objective-C学习笔记”旨在帮助初学者理解并掌握这种强大的编程工具。 一、Objective-C基础 1. 类与对象:Objective-C中的所有操作都是基于类的,类是对象的模板,而对象是类的实例。理解类和对象的概念是...
### FFMPEG开发学习笔记知识点总结 #### 数据结构解析与运用 ##### AVFormatContext - **简介**: `AVFormatContext` 是一个核心的数据结构,在FFmpeg中被用于封装媒体文件的相关信息,包括输入和输出格式、编解码...
STM8库函数学习笔记主要涉及的是STM8微控制器的库函数开发,涵盖了IIC、ADC、串口(如RS232和RS484)以及PWM等基本功能的实现。以下将对这些知识点进行详细解释: 1. **内部时钟初始化与使用**: STM8库函数中,...
这篇博客主要讨论的是在iOS开发中如何进行Objective-C(OC)和Swift的混合编程,这是在Swift语言推出后,很多开发者需要面对的问题。Swift作为苹果公司推出的新型编程语言,具有语法简洁、类型安全等优点,但同时,...
个人学习研究笔记,OC、C++、iOS 逆向、汇编、Python。
电子电路学习笔记-电子技术基础知识 本电子电路学习笔记总结了模拟电路和数字电路的基础知识,涵盖了COMS电平、TTL电平、HC和HCT电平、LS电平、CMOS电平、 RS232电平等多种电平标准的特点和应用。同时,也介绍了...
1. `objc_AssociationPolicy`枚举定义了四种关联策略,它们决定了如何管理和销毁关联的对象: - `OBJC_ASSOCIATION_ASSIGN`:弱引用,不保留关联对象,适用于非所有权关系。 - `OBJC_ASSOCIATION_RETAIN_NONATOMIC...
本文总结了模拟电路和数字电路的学习笔记,涵盖了模拟电路和数字电路的基础知识和应用技术,包括COMS电路和TTL电路的差异、驱动能力、电平转换方法、逻辑门电路、OC门和OD门、电阻分压法、限流电阻法、无极性电容和...