Object-C知识点 (一) 常用知识点
Object-C常用的知识点,以下为我在实际开发中用到的知识点,但是又想不起来,需要百度一下的知识点
#pragma mark -- isKindOfClass与isMemberOfClass
isKindOfClass 是对于继承来讲的 Teacher : Person : NSObject
teacher 是Teacher、Person、NSObject类或其子类
isMemberOfClass 是对于该类(Teacher)的成员来讲的 判断是不是由该类创建出来的
teacher 是Teacher类的成员,由Teacher类创建的 判断的内容更加精确。
isSubclassOfClass 使用和isKindOfClass差不多/只不过一个是类方法,一个是对象方法
#pragma mark -- super、superClass、class的区别
class:获取方法调用者类名
superclass:获取方法调用者的父类类名
super:编译修饰符,不是指针,指向父类的 "标志",
本质还是拿到当前对象去调用父类的方法
注意:super并不是拿到父类对象去调用父类方法
#pragma mark -- removeFromSuperview
// 移除contentView上所有的子控件
[self.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
#pragma mark -- isEqual、==、isEqualToString
isEqual与==是一样的 比较内存地址
isEqualToString 比较对象的内容
可以重写对象的isEqual方法来欺骗系统,通常用来完成从数组中删除某个对象不能实现 (对象一样但是内存地址不一样)
也可以通过比较内存是否一样进行删除的操作 --->重写更符合封装的原则
[persons removeObject:person]; 这样返回YES的时候才会去删除该对象,返回NO认为数组中没有该对象,肯定不会删除
在person.m中实现下面的方法
- (BOOL)isEqual:(id)object
{//系统默认
//return self == object;
//当一个人的name和年龄一样的时候就认为是同一个人
return [self.name isEqualToString:other.name] && [self.age isEqualToString:other.age];
}
#pragma mark -- nil Nil NULL NSNull
nil:指向oc中对象的空指针 对象是空的 对象是存在的
Nil:指向oc中类的空指针 类是空的
NULL:指向其他类型的空指针,如一个c类型的内存指针 还不是一个对象
NSNull:在集合对象中,表示空值的对象
1、NULL表示这个字符串不指向任何的东西,如果这时候你调用它的方法,那么就会出现空指针异常。
2、""表示它指向一个长度为0的字符串,这时候调用它的方法是安全的。
3、NULL不是对象,""是对象,所以NULL没有分配空间,""分配了空间
*******结论********
在OC/C++中,nil可以调用任何的方法,都不会报错
NULL 表示地址是0
nil是指针指向NULL的空对象 nil是一个对象,但是是一个空对象
若obj为nil:
[obj message]将返回NO,而不是NSException
若obj为NSNull:
[obj message]将抛出异常NSException
#pragma mark -- NSDictionary
字典里面添加另外一个字典
[dictionaryM addEntriesFromDictionary: newDictionary];
判断字典里面是否包含某一个key
if ([[dicitionary allKeys] containsObject:key])
#pragma mark -- NSString
判断一个字符串是否为空,首先就要确保他不是null(不是空对象),然后再判断他的长度(是一个对象后再判断长度)。
if(string != NULL && string.length != 0) {字符串里面才有东西}
if([string isKindOfClass:[NSNull Class]] || string.length == 0) {字符串为空}
控制台打印的NSNumber和NSString是一样的,需要注意!!!!!
#pragma mark -- 自定义代码块存放路径
在Finder文件夹command + Shift + G
~/Library/Developer/Xcode/UserData/CodeSnippets
换新电脑,直接替换文件夹中的内容即可。
#pragma mark -- Xcode中的快捷键
停用断点 command+control+\
当前行插入断点 command+\
当前行启用断点 command+option+\
最小化 command+m
全部最小化 command+option+m
网络: command + Shift + C
强制重新启动Mac control+command+右上角
便签/Xcode的控制台输出 command+shift+Y
展示文件的真实位置 command+shift+J
打开emoji表情键盘 command + control + 空格
显示隐藏文件 shift + Command + .
类文件之间的跳转 Ctrl + Command + 上箭头 / 下箭头
折叠代码 command + option(Alt) + 左箭头/右箭头
退回 command + Ctrl + 左箭头/右箭头
当前文件中全部选中当前单词 Ctrl + Command + E
命令行输入 find . -name "*.m" | xargs wc -l 查找当前路径下的所有.m文件行数
#pragma mark -- 网络安全协议
URL的基本格式:协议://主机地址/路径
不同的协议:代表不同的资源查找方式,资源传输方式 http file mailto FTP
主机地址:存放资源的主机的IP地址
路径:资源在主机中的具体位置
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
#pragma mark -- 网络字符串编码
NSString * urlString = @"www.baidu.com/呵呵";
// 使用这个方法,如果urlString已经进行了UTF8编码,就不会再次编码了。
NSString * encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)urlString, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8)); NSURL * url = [NSURL URLWithString:encodedString];
NSLog(@"---url---%@", url);
#pragma mark -- window
//这样获得的窗口是目前显示在屏幕最上面的窗口 取出来的可能不是keywindow 因为:键盘也是一个窗口(window)
UIWindow * window = [[UIApplication sharedApplication].windows lastObject];
UIWindow * window = [UIApplication sharedApplication].keyWindow; 通常用这个
#pragma mark -- 内存中的五大区域
栈: 局部变量、当局部变量的作用域被执行完毕之后,这个局部变量就会被系统立即回收.
堆: OC对象、使用C函数申请的空间. 内存管理中:程序员需要严格控制的部分
BSS段: 未初始化的全局变量、静态变量. 一旦初始化就回收 并转存到数据段之中.
数据段: 已经初始化的全局变量、静态变量. 直到程序结束的时候才会被回收.
代码段: 代码. 程序结束的时候,系统会自动回收存储在代码段中的数据.
栈、BSS段、数据段、代码段存储在它们中的数据的回收,是由系统自动完成的.不需要我们干预.
#pragma mark -- 单个对象的内存泄露.
1).什么叫做内存泄露?
指对象没有被回收,该回收的时候而没有被回收,一直驻留在内存之中直到程序结束.
2).单个对象发生内存泄露的原因.
-> 有对象的创建,没有匹配的release
-> retain与release不匹配.
-> 在不恰当的时候,指针赋值为nil
-> 在方法中不当使用retain.
3).如何做到单个对象被正确释放
-> 有对象的创建就要有对象的release。
-> 有多少个retain就要有多少个release。
-> 不要轻易的为1个指针赋值为nil 除非指针是1个野指针.
-> 在方法中不要轻易的为参数retain
#pragma mark - 枚举
//枚举的定义
typedef NS_ENUM(NSUInteger, ActionEnum) {
ActionEnumTop = << ,
ActionEnumBottom = << ,
ActionEnumLeft = << ,
ActionEnumRight = << ,
}; //调用
[self matchAction:ActionEnumTop | ActionEnumBottom]; //方法的处理
- (void)matchAction:(ActionEnum)actionEnum
{
NSLog(@"%ld", actionEnum); if ((actionEnum & ActionEnumTop) == ActionEnumTop) {
NSLog(@"ActionEnumTop");
} if ((actionEnum & ActionEnumBottom) == ActionEnumBottom) {
NSLog(@"ActionEnumBottom");
} if ((actionEnum & ActionEnumLeft) == ActionEnumLeft) {
NSLog(@"ActionEnumLeft");
} if ((actionEnum & ActionEnumRight) == ActionEnumRight) {
NSLog(@"ActionEnumRight");
}
}
#pragma mark - 去掉字符串"前后"的空格
// 中间的空格无法去掉.
str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
更多内容--> 博客导航 每周一篇哟!!!
有任何关于iOS开发的问题!欢迎下方留言!!!或者邮件lieryangios@126.com 虽然我不一定能够解答出来,但是我会请教iOS开发高手!!!解答您的问题!!!
Object-C知识点 (一) 常用知识点的更多相关文章
- android之常用知识点(一)
本文主要包括安卓一些常用的知识点 android常用的四种响应按钮点击事件的方法 android动态刷新界面 android常用的listView用法 android常用的handler的用法 and ...
- JAVA常用知识点及面试题总结
1. String.StringBuffer.StringBuilder三者区别? (1)三者在执行速率上的比较: String<StringBuffer<StringBuilder 原因 ...
- javaScript常用知识点有哪些
javaScript常用知识点有哪些 一.总结 一句话总结:int = ~~myVar, // to integer | 是二进制或, x|0 永远等于x:^为异或,同0异1,所以 x^0 还是永远等 ...
- 一文学会 TypeScript 的 82% 常用知识点(下)
一文学会 TypeScript 的 82% 常用知识点(下) 前端专栏 2019-11-23 18:39:08 都已经 9021 年了,TypeScript(以下简称 TS)作为前端工程师不得 ...
- DB2_SQL_常用知识点&实践
DB2_SQL_常用知识点&实践 一.删除表中的数据(delete或truncate) 1 truncate table T_USER immediate; 说明:Truncate是一个能够快 ...
- 剑指Offer——知识点储备-常用算法
剑指Offer--知识点储备-常用算法 快速排序 注:若排序是有序的,采用快排,则退化为冒泡排序. 解决这个问题,采用两个选取基准的方法 (1)随机选取基数(在这个区间内随机取一个数) 出现的恶劣情况 ...
- HTML常用知识点代码演示
1 HTML部分常用知识点 <!-- 版本声明 --> <!DOCTYPE html> <!-- 唯一根元素 --> <html> <!-- 对网 ...
- Java 常用知识点
Java 常用知识点 1.日期格式化 SimpleDateFormat Date date=new Date(System.currentTimeMillis()) ; SimpleDateForma ...
- Less常用知识点
上篇文章介绍了如何安装Less,我们将所有东西都写在.less里面,最后通过命令将.less转换成.css文件,就可以放入到项目里用了.今天了解一些less常用知识点. 1.变量:声明两个变量,一个是 ...
随机推荐
- 最近一些朋友问我,临近快毕业了专业不对口,想转行看到IT行业就业前景不错,但是编程语言众多不了解,不知道哪门语言能够快速入门掌握,短期能让我找到工作
我做互联网前端后台开发也有四年多了,一路走过来,累并快乐着.快乐比艰辛更多,源自我的兴趣驱动.初中的一个偶然的机会我接触到了计算机,从那个时候就喜欢上开始经常到网吧上网.那个时候我对计算机领域的认识是 ...
- Unix Shortcuts
find . -name "*.java" -type f find all the files within a director and its sub-directory e ...
- [原创]Nexus5 内核编译烧录过程记录
参考Android系统源代码情况分析第二章进行实践,为了提高效率,也为了增加实践机会,使用Nexus5进行内核编译.需要说明的是,Android源代码工程默认是不包含它所使用的Linux内核源码,如果 ...
- swift学习 - 单例实现(singleton)
swift中实现单例的方式 class LGConfig: NSObject { static let instance = LGConfig() private override init() { ...
- Plupload上传插件自定义图片的修改
若自定义的一个上传图片效果,代码(可能不全),当用户再次点击所有或任意一个上传图片的input时,uploader.files已经多了客户再次上传的图片,但是你就想要最后的两张图片,这就可以使用到up ...
- 01-.Net编程机制
.NetFarmwark特点: 多平台:该系统可以在广泛的计算机上运行,包括从服务器.桌面机到PDA和移动电话. 行业标准:该系统使用行业标准的通信协议,比如XML.HTTP.SOAP和WSDL. 安 ...
- Java 后台创建word 文档
---恢复内容开始--- Java 后台创建 word 文档 自己总结 网上查阅的文档 分享POI 教程地址:http://www.tuicool.com/articles/emqaEf6 方式一. ...
- VR全景智慧城市——宣传再华丽,不如用户亲身参与
在当今社会上,VR和AI已经成为黑科技的代名词了.同样都是很热门的科技,但是它们的出场方式却差距不小.AI的出场方式是很有科技范,而VR的出场方式却是土豪气十足. 营销是什么,是通过制造爆点,用爆点实 ...
- javaSE_07Java中类和对象-封装特性
一.谈谈什么是面向对象的思维 理解面向对象,重点是要思考以下的问题 面向过程 vs 面向对象 Ø 谈谈什么是面向过程的编程思想? Ø 为什么有面向过程还要有面向对象? Ø 谈谈什么是面向对象的编程思想 ...
- CTE递归 MAXRECURSION 遇到的问题
在使用Sql Server的时候,当需要递归的时候很多时候就会想到使用CTE.但是当递归层数比较多,超过了100层,或者是一个递归死循环的时候.执行就会爆递归次数已到,最多100的错误. 当面对第一种 ...