oc

OC 第二次检查命名规范思考与学习

微笑、不失礼 提交于 2019-12-09 16:43:17
紧接着上篇,每次看也不要求全部都会,哪怕每次学到一个技术点也算是赚了: 任务:对自己项目的方法命名进行优化。 这篇主题:Naming Methods (命名方法) 第一: ******对于表示对象执行的操作的方法,以_动词_开头名称: ****** (void) select TabViewItem:(NSTabViewItem *)tabViewItem 第二: ******不要使用Do或does作为名字的一部分,因为这些助动词很少增加意思。另外,不要在动词前使用副词或形容词。 ****** 第三: 如果方法返回接收者的属性,则以该属性命名方法。 除非间接地返回一个或多个值,否则没有必要使用“get”。 - (NSSize)cellSize; Right. - (NSSize)calcCellSize; Wrong. - (NSSize)getCellSize; Wrong. 第四,在所有参数之前使用关键字: - (void)sendAction:(SEL)aSelector toObject:(id)anObject forAllCells:(BOOL)flag; Right. - (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag; Wrong. 第五,在论证之前造一个词来描述这个论证: - (id

OC图书馆系统(含归解档)

▼魔方 西西 提交于 2019-12-09 13:25:26
OC图书馆系统 功能介绍: 1.图书馆内可以 添加 、 删除 书籍。 2.图书馆可以 查询 书籍的信息,包括书名、作者、书籍编号、书籍分类、书籍剩余可借阅量。 3.图书馆可以 打印 出总书单,还可以按照要求查询某一作者或某一类别的书单。 4.学生类可以在图书馆中借阅书籍,并可 计算借阅时间 (书籍的借出时间将归档在你电脑上的某个文件中,直至归还),超时将额外收费。 #import <Foundation/Foundation.h> 下面先从Book类开始: Book类建立: @interface: @interface Book : NSObject<NSCoding,NSCopying> @property(copy,nonatomic) NSString *bookName,*bookWriter,*bookPrice,*sort; @property int bookCode,bookCount; @property NSDate *borrowTime,*returnTime; @property NSString *strborrowtime; Book类属性包括NSString:书名、作者、价格及分类,int:书本编号、书本数量, NSDate:借出及归还时间,NSString:借出时间的string格式。这里不需要归还时间的string格式

IOS OC objc_msgSend的作用

时光毁灭记忆、已成空白 提交于 2019-12-09 12:30:19
一 消息传递 OC中调用方法也叫消息传递(pass a message),消息有名称(name) 或 选择子(selector),可以接受参数,而且可以设定返回值。 OC中向某对象传递消息,会使用动态绑定机制来决定需要调用的方法,在底层,所有方法都是普通的C语言函数,然而对象受到信息之后,究竟调用什么方法则完全完成于运行期决定,甚至可用在程序运行时改变,这些特性使得OC为动态语言。给对象发送消息的写法: id returnValue = [object messageName:parameter]; returnValue 是 返回值 object 是 接受者(receiver) messageName 是 选择子(selector) 选择子与参数合起来称为消息。 编译器看到 [object messageName:parameter] 消息后会转换为标准的C语言函数调用,所调用函数是消息传递机制中的核心函数,objc_msgSend,其原型如下: void objc_msgSend(id self,SEL cmd, …); 这是个“参数个数可变的函数”,能接受多个参数,第一个参数代表 接受者,第二参数代表选择子(SEL 就是选择子的类型,选择子就是方法名),后续参数就是消息中的那些参数,其顺序不变。 二消息调用过程 编译器会把刚才例子中的消息转换成以下函数 id =

OC @property声明全局变量

风格不统一 提交于 2019-12-09 10:47:59
之前我介绍了set和get方法,但在实际操作时,我们会发现重复的代码量太大,如果有几十个成员变量要声明,那么就要对应有几十个set和get方法,为了免去手工书写set和get方法繁琐的代码,人民的英雄@property应运而生。 @property是编译器的指令,那么什么是编译器的指令呢?其实就是去告诉编译器要做什么啦~ @property 告诉编译声明实现set、get方法 这里出现了陌生的标识符 我们简单的介绍一下 nonatomic 代表着线路安全 在手机还只有512M内存时,如果对属性加锁,那么手机运行速度就会变得非常慢,所以对属性一般都是不加锁的,这样的速度相对快很多,这个习惯延续到了今天。 strong和weak 代表内存管理。 直接赋值的如int double等,直接写成 @property (nonatomic)int age; 而对象(字符串)要用strong作为参数。 这样是不是方便很多了呢? 其实在xcode早期版本,@property只是声明set和get方法,实现它们还需要另一个指令@synthesize 但是@synthesize 已经消失在滚滚oc长河当中,当做了解就好。 来源: oschina 链接: https://my.oschina.net/u/2886189/blog/733726

OC语言@property @synthesize和id

与世无争的帅哥 提交于 2019-12-09 10:47:25
OC 语言 @property @synthesize 和 id 一、@property @synthesize 关键字 注意: 这两个关键字是编译器特性,让 xcode 可以自动生成 getter 和 setter 的声明和实现。 (一)@property 关键字 @property 关键字可以自动生成某个成员变量的 setter 和 getter 方法的声明 @property int age; 编译时遇到这一行,则自动扩展成下面两句: - (void)setAge:(int)age; - (int)age; (二)@synthesize 关键字 @synthesize 关键字帮助生成成员变量的 setter 和 getter 方法的实现。 语法: @synthesize age=_age; 相当于下面的代码: - ( void ) setAge:(int)age { _age=age; } - (int)age { Return _age; } (三)关键字的使用和使用注意 类的声明部分: 类的实现部分: 测试程序: 新版本中: 类的声明部分: 类的实现部分: 测试程序: (1)在老式的代码中, @property 只能写在 @interface @end 中, @synthesize 只能写在 @implementation @end 中,自从 xcode 4.4 后,

OC学习之旅 (一) 内存管理及OC常用方法

人盡茶涼 提交于 2019-12-09 10:47:10
最近学习OC,所以在博客写下自己的笔记. OC的基本: 1 id 相当于java的Object 代表任何对象. 所以id是关键字,不能用作变量!! 2 oc中使用"."符号是调用 int a =object.a 是调用的是 [object getA]; object.a=3; object.a是调用object.setA方法!! 3 @property : Objective-C语言关键词,与@synthesize配对使用。xcode4.5以及以后的版本,@synthesize可以省略. 功能:让 编译器 自动编写一个与 数据成员 同名的方法声明来省去读写方法的声明。要在头文件声明变量后,在声明 @property, 再回到.m文件使用注解 @synthesize . 假如在oc里面.m中有@synthesize a , 但在.h头文件中没有这个属性 和没有 @property a, 它会自动生成的.还有关于@property标准写法再下面贴出的例子有. 4 关于oc 的类的初始话 . oc的构造器方法是 init , 而不像java用类名的名字作为成员方法.假如我的类中有一个ID的属性,初始化它,并赋值给ID ,如: -(id)initWithID:(int)newID{ //判断self是否为空 if(self = [super init]){ _ID = newID;

C++控制台打飞机小游戏

只谈情不闲聊 提交于 2019-12-08 23:43:38
文章目录 前言 介绍 代码 后记 前言 我终于决定还是把这个放出来。 这是我在 纪中 颓废的时候写的。 介绍 视频在这 : 点我点我点我点我点我点我点我 (辣鸡CSDN只能插入腾讯视频,我又没在腾讯上实名验证,只能粘链接了) 具体信息主界面上都有写。 按空格暂停,建议暂停后再升级属性。 记录最高分的文件进行了加密。 有boss(上面视频2分47秒)。 挺好玩的。 可能有bug,不想改了,整体体验不错就行了。 更多控制台操作可以看之前写的 鼠标操作 的文章,也可以直接在这个上面复制。 MinGW编译无错误,只有 lld 输出的几个警告。 只有一个文件,没有任何其他的东西。 可以直接扒下来编译。 一开始写的时候打了很多注释,后来就不想打了。 大家凑合着看吧,不清楚的就评论,如果我还记得到就答一下哈。 对了,为了防止暂停作弊,暂停过后开始时鼠标会回到飞机的位置。 这个代码我一个人可能总共肝了20多个小时,希望不要随意转载。注明出处就好。 如果你能帮我改得更有趣,bug更少的话可以找我。 更多内容看代码。 我记不到这份代码是什么情况了,有可能是之前更新到一半的代码,反正我试着海星。 代码 # include <set> # include <cmath> # include <ctime> # include <cstdio> # include <cstdlib> # include

iOS与js交互(WebView+WKWebView)

心已入冬 提交于 2019-12-08 19:40:45
需求:1点击js登入按钮将用户账号和密码传给移动端 2将客户端的token传给html端 据我了解有以下几种方法 1:webview的javascriptCore 2:webkit 3:url拦截 4:第三方库 我用的是1和2 理论:js与oc相互调用并且传值 我们可以理解成河2边需要送东西的过程 我们需要在js和oc之间搭建一个桥梁而jsexport就是这做桥梁,有了桥梁以后在2端传值我们还需要一个对象(快递员) 就好比现实中js在桥的一段,而移动端在桥的这一边现在他们需要给彼此送东西那么就需要一个快递员(对象) ---------------------------------------------------------- 第一种WebView+ javascriptCore 第一步搭建2端之间桥梁javascriptcore 1)导入javascriptCore Build phass->link binary with libraries 添加头文件 #import <JavaScriptCore/JavaScriptCore.h> 2)初始化桥梁 @property(nonatomic,strong)JSContext *jsContext; 在web的webViewDidFinishLoad:代理方法中 self.jsContext = [self

OC中的深浅拷贝(copy, MutableCopy)

て烟熏妆下的殇ゞ 提交于 2019-12-07 19:13:25
int main(int argc, const char * argv[]) { @autoreleasepool { //------------------不可变的对象------------------- //创建一个字符串型a NSString *a = @"abcdefg"; //浅拷贝a,只是引用了一下,打印出来地址是一样的 //这里如果把浅拷贝出来的a1的值改变了,源a是不会跟着变的,a1会自动生成一个新的对象,和a是不同的地址 NSString *a1 = [a copy]; //深拷贝a,直接克隆了一下,打印出来是不同的地址 NSString *a2 = [a mutableCopy]; //打印a,a1,a2的值,比较一下 NSLog(@"%@ %@ %@", a, a1, a2); //打印a,a1,a2的地址,比较一下 NSLog(@"%p %p %p", a, a1, a2); //------------------可变的对象--------------------- NSMutableString *b = [NSMutableString stringWithString:@"abcdefg"]; //对可变对象不论是浅拷贝还是深拷贝,都是直接克隆了对象出来,都是不同的地址 NSMutableString *b1 = [b copy];

OC中的NSSet(集合)

ⅰ亾dé卋堺 提交于 2019-12-07 19:13:10
NSSet(集合) 集合:集合(NSSet)和数组(NSArray)有相似之处,都是存储不同的对象的地址;不过NSArray是有序的集合, NSSet是无序的 集合。 集合是一种哈希表,运用散列算法,查找集合中的元素比数组速度更快,但是它 没有顺序 。 集合的初始化 int main(int argc, const char * argv[]) { @autoreleasepool { //类方法初始化一个集合 //方法1) //给一个集合赋多个值 NSSet *c = [NSSet setWithObjects:@"one", @"two", @"three", @"four", nil]; //集合是无序的 NSLog(@"%@", c); //方法2) //先创建一个包含元素的数组_d NSArray *_d = [NSArray arrayWithObjects:@"one", @"two", @"three", @"four", @"five", nil]; //将数组_d里面的所有元素全部传给集合d NSSet *d = [NSSet setWithArray:_d]; NSLog(@"%@", d); //实例化方法初始化一个集合, 加alloc创建一个空间!!! //方法1) NSSet *e = [[NSSet alloc]init]; //方法2) NSSet