Objective-C——基础2

一、Objective-C@的用法

  1. Objective-C的关键字都以@开头。
  2. 其他作用
    @[ ] 创建不可变数组
    @{ } 创建不可变字典,
    @( ) 能把常量或变量变成字面对象

二. 预编译指令

作用:对代码的分组,方便代码查找和导航
@pragma mark 标识符
@pragma mark -

三、OC中的三种注释:

  1. 单行注释:
    //我是注释的内容

  2. 多行注释:
    /* 我是华丽丽的注释内容 */

  3. 文档注释,作用:让自己定义的方法(函数)在Xcode输入时弹出提示,用来说明此方法(函数)的作用
    /**
    * 木有错,我就是传说中的文档注释 *
    */

四、成员变量和实例变量

成员变量:基本数据类型定义的变量
实例变量:OC类定义的变量

五、结构体赋值

// 直接赋值
struct Person {
  char name[10];
  int  sex;
}xiaoming = {"xiaoming",1};

// 间接赋值
struct Person xiaom;
xiaom.name = “xiaoming”;
xiaom.sex = 1;
struct Person xiaoming = xiaom;

// 强制转换赋值
struct Person xiaoming = (struct Person){"xiaoming”,1};

六、结构体与类的区别

  1. 结构体变量存在栈里面,类实例化出来的对象存在堆里面

  2. 结构体里面不能写函数,类里面可以写函数并且可以写方法

  3. 结构体成员没有访问权限的说法,类的成员有@public @private @protected三种

  4. 结构体不可以被继承,类可以继承

  5. 结构体的思想属于面向过程的思维,类是面向对象的产物

七、函数和对象方法的区别

  1. 语法区别,并且对象方法都以-号开头,函数直接以返回值开头

  2. 对象方法的声明只能写@interface…@end中间(不包括写成员变量处)、对象方法的实现
    只能写在@implementation…@end中

  3. 函数属于整个文件,可以写在文件中的任何位置,包括@implementation…@end中,但写@interface…@end会无法识别,函数的声明可以在main函数内部也可以在main函数外部

  4. 对象方法只能由对象来调用,不能像函数一样直接调用

  5. 对象方法可以访问当前类的成员,函数哪怕写在@implementation里也不可以直接访问类的成员

6.C函数的定义不能在@interface中,声明可以在。

八、类方法使用

类方法的优势:可以不依赖对象,不占用内存空间

  1. 类方法可以和实例方法同名。

  2. 类方法和实例方法一样在@interface里声明,在@implementation里实现。

  3. 类方法只能被类调用执行,向实例对象发送类方法是不能被触发执行的。

  4. 类方法里面不能直接使用实例成员

  5. 类方法里面可以调用其他类方法,不可以直接调用对象方法

  6. 对象方法里面可以调用类方法

九. 对象与对象之间的关系

组合关系:整体与局部
依赖关系:一个对象作为另外一个对象的参数
关联关系:一个对象作为另一个对象的实例变量,且它们之间不是组合关系
注:组合和关联用法一样。

十. C和OC中的字符串

OC中的字符串是NSString类型,长度用length计算,中英文都各自只占一个字节。
在Xcode中C语言中一个汉字占3个字节,英文占一个字节。

十一. 匿名对象

没有变量名,创建后直接用,不进行赋值。
只能对成员变量赋值一次。
只能调用一次方法。
用法类似于类方法:
区别:匿名对象创建的了空间,类不创建空间
缺点:会造成内存泄露

十二. description

  1. 辅助NSLog输出
    NSLog(@”%@”, objectA);这会自动调用objectA的descriptong方法来输出ObjectA的对象信息

  2. 同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循环调description方法

  3. 在一个类中重写- (NSString *)description;可以改变使用 NSLog通过%@输出的格式,当在某个地方用NSLog输出这个类时,会输出自己设定的格式,输出的格式只对本类有效,对其他类无效。

  4. description 返回什么,NSLog就输出什么

十三. self和super

两者都只在方法中使用
self关键字: 谁调用当前方法,self就代表谁;在对象方法中,代表当前对象;在类方法中,代表类。
super关键字:显示地调用父类中的方法;在使用super时,他们的关系必须是父子关系

十四. 不能为id变量类型用点运算符,编译器会报错

十五. 在方法中给属性赋值时,使用self会调用setter方法,直接用带有下划线的开头的成员变量赋值,不会调用setter方法

十六. 非正式协议

非正式协议:没有实现的部分的分类。一般为“NSObject”的分类,然后列出方法名,可以没有.m文件;使用的时候直接继承就可以,然后子类去实现分类的里面的方法。

十七. 快捷代码块

把代码拖入快捷代码区,点击编辑:在需要改变的地方加上<#name#>

十八. @synthesize和@property

@synthesize t,k; 生成的成员变量前面不带下划线
指定成员变量@synthesize t = _t
只用@property会生成前面带下划线的成员变量。

十九. 自动释放池注意点

自动释放池并不包含实际对象,而只是包含对象的引用,对象将在自动释放池清理的时候释放。
使用对象的方法时,对象的引用计数不加1,当对象用作传值时,传入其他的对象方法时,引用计数加1

二十. ARC方法命名

当ARC遇到方法调用时,会检查方法名,如果名字以alloc、new、copy、mutableCopy、init这些词开头且驼峰拼写,它会假定方法返回对象的所有者给方法的调用者。

二十一. 不能用import导入.m文件,会导致重复编译,可能会有多个.o文件

二十二. 多态

父类指针指向子类的对象
父类不能调用子类独有的方法;当父类要使用子类的方法时,可以强制类型转换
原因:编译器在编译时只检查指针变量的类型下的方法,如果有就运行,没有就报错,运行时去调用子类的方法

二十三. 方法和成员变量都可以重新定义,但必须是在.m文件中,在.h文件中会报错。

二十四. iOS开发new与alloc/init的区别

new和alloc/init在功能上几乎是一致的,分配内存并完成初始化。
区别:alloc分配内存的时候使用了zone,它是给对象分配内存的时候,把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度。

二十五. 条件运算符Xcode支持如下扩展

A ? :B 相当于 A ?A : B

利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值