欢迎来真孝善网,为您提供真孝善正能量书籍故事!

深入解析iOS开发:Objective-C技术详解

时间:11-08 现代故事 提交错误

大家好,如果您还对深入解析iOS开发:Objective-C技术详解不太了解,没有关系,今天就由本站为大家分享深入解析iOS开发:Objective-C技术详解的知识,包括的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

一个。在ARC中,当可能出现循环引用时,往往通过让一端使用weak来解决,比如:delegate代理属性

b.它已经对此做出了强有力的参考。没有必要再次进行强引用。这时候也会用到weak。定制的IBOutlet控件属性一般使用weak;当然也可以用strong。下面也讨论了:

差异:

弱属性指示该属性定义“非拥有关系”。当为此类属性设置新值时,setter 方法既不保留新值,也不释放旧值。这个trait与assign类似,但是当属性指向的对象被销毁时,属性值也会被清除(nilout)。 allocate的“设置方法”只会对“标量类型”(如CGFloat或NSInteger等)进行简单的赋值操作。 assigin可以用于非OC对象,但对于OC对象必须使用weak

3. 如何使用copy关键字?

copy 这个特质所表达的所有权类似于强。然而,set方法并不保留新值,而是“复制”它。当属性类型为NSString 时,此特性通常用于保护封装,因为传递给setter 方法的新值可能指向NSMutableString 类的实例。该类是NSString 的子类,它表示一个可以修改其值的字符串。如果此时没有复制字符串,那么在设置属性之后,字符串的值可能会在对象不知情的情况下被更改。因此,这时候就需要复制一份“不可变”的副本。

(不可变)字符串,以确保对象中的字符串值不会无意中更改。只要用于实现属性的对象是“可变的”,在设置新的属性值时就应该创建一个副本。

使用@property来声明NSString、NSArray和NSDictionary。 copy 关键字经常被使用,因为它们有相应的变量类型:NSMutableString、NSMutableArray 和NSMutableDictionary。它们之间可能存在赋值操作。为了确保对象中的字符串值不会意外地发生变化,在设置新的属性值时应该进行复制。

4、这种写法会出现什么问题: @property (copy) NSMutableArray *array;

两个问题:

1.当对数组中的元素进行添加、删除、修改时,程序会因为找不到对应的方法而崩溃。因为copy是复制一个不可变的NSArray对象;

2、使用原子属性会严重影响性能;

5. 如何在自己的类上使用复制修饰符?如何使用复制关键字覆盖setter?

如果你想让你写的对象具有复制功能,你需要实现NSCopying 协议。如果自定义对象分为可变版本和不可变版本,那么必须同时实现NSCopying 和NSMutableCopying 协议。

具体步骤:

1.需要声明该类遵守NSCopying协议

2. 实现NSCopying 协议。该协议只有一种方法:

6.@property的本质是什么? ivar、getter 和setter 如何生成并添加到此类中

1.@property的本质是什么?

@property的本质=ivar(实例变量) + getter(检索方法) + setter(存储方法)

“属性”有两大概念:实例变量(ivar)和访问方法(getter + setter)

2. ivar、getter、setter是如何生成并添加到这个类中的?

这是由编译器自动合成的,并由@synthesize关键字指定。如果不指定,默认为@synthesize propertyName=_propertyName;如果手动实现getter/setter方法,则不会自动合成。现在编译器已经默认为我们添加了@synthesize propertyName=_propertyName;所以除非你确实想更改成员变量名称,否则不需要手动添加它。

生成getter方法时,会判断当前属性名是否带“_”,例如属性声明为@property(nonatomic,copy) NSString*_name;那么生成的成员变量名就会变成“_name”。如果我们想要手动生成一个getter方法,就必须判断它是否以“_”开头。

7. 如何在@protocol和category中使用@property

在协议@protocol中使用@property只会生成setter和getter方法声明。使用属性的目的是希望符合我们协议的对象能够实现属性;

在类别中使用@property只会生成setter和getter方法声明。如果确实需要向类别添加属性,则需要使用两个运行时函数。

//objc_setAssociatedObject

//objc_getAssociatedObject

8. Runtime如何实现弱属性?

要实现weak属性,首先要了解weak属性的特点:

弱属性表明该属性定义了“非拥有关系”。当为此类属性设置新值时,setter 方法既不保留新值,也不释放旧值。这个trait与assign类似,但是当属性指向的对象被销毁时,属性值也会被清除(nil out)。

那么运行时是如何实现弱变量自动设置nil的呢?

运行时将布局注册的类并将弱对象放入哈希表中。使用weak指向的对象的内存地址作为key。当该对象的引用计数为0时,就会执行dealloc。如果weak指向的对象的内存地址是a,那么a将被用作key。在这个weak表中搜索,找到所有以a为key的weak对象,从而设置为nil。

[]@property中的属性关键字是什么?

[]dealloc时weak属性需要设置为nil吗?

在ARC环境下,无论是强指针还是弱指针,都不需要在dealloc中将其设置为nil。 ARC会自动为我们处理。

即使编译器不为我们执行此操作,weak 也不需要在dealloc 中设置nil。

[]@synthesize和@dynamic的作用是什么?

Synthesis,当你不手动实现这两个方法时,编译器会自动生成setter和getter方法。

dynamic,告诉编译器你将动态生成setter和getter方法,并且你不会要求编译器为你生成它们。

@synthesize日期=_date;这一直是令人困惑的。这是将成员变量绑定到您的属性。

现在不需要写synthesize了。

[] ARC下,当没有显式指定属性关键字时,默认的关键字是什么?

基本数据类型对应的默认关键字为

原子、读写、分配

对于普通OC对象

原子、读写、强

[] 用@property声明的NSString(或NSArray、NSDictionary)经常使用copy关键字,为什么?如果使用strong关键字会导致什么问题?

因为父类指针可以指向子类对象,所以使用copy的目的就是为了防止这个对象的属性受到外界的影响。使用副本

无论传递给我的是可变对象还是不可对象对象,我持有的都是不可变的副本。

如果我们使用的是强

,那么这个属性可能指向一个可变对象。如果外部修改了可变对象,就会影响属性。

copy 该特质所表达的所有权关系与strong相同

相似的。然而,set方法并不保留新值,而是“复制”它。当属性类型为NSString 时

当传递给setter 方法的新值可能指向NSMutableString 类的实例时,此特征通常用于保护封装。这个类是NSString

的子类表示一个可以修改其值的字符串。如果此时没有复制字符串,那么在设置属性之后,字符串的值可能会在对象不知情的情况下被更改。因此,这时候就需要复制一份“不可变”的副本。

(不可变)字符串,以确保对象中的字符串值不会无意中更改。只要用于实现属性的对象是“可变的”,在设置新的属性值时就应该创建一个副本。

[]@synthesize 合成实例变量的规则是什么?如果属性名为foo并且有一个名为_foo的实例变量,是否会自动合成一个新变量?

[]有了属性实例变量的自动合成,@synthesize还有哪些使用场景?

[]向objc中的nil对象发送消息会发生什么?

[]向objc中的对象发送消息[obj

foo] 和objc_msgSend() 函数?

[]什么时候会报无法识别的选择器异常?

[]如何布局objc对象的内存? (考虑有父类的情况)

用户评论

?娘子汉

学习 iOS 开发就必须要了解 Objective-C 啊!

    有18位网友表示赞同!

浮光浅夏ζ

Objective-C 在 iOS 历史上占了很大的地位呢。

    有6位网友表示赞同!

繁华若梦

现在流行 Swift 了,但 Objective-C 还是有很多人在用的。

    有11位网友表示赞同!

陌上蔷薇

想看 iOS 源码,Objective-C 是必备的工具。

    有10位网友表示赞同!

╭摇划花蜜的午后

Objc 的语法确实有点复杂,不过经过一段时间的学习就能懂了。

    有11位网友表示赞同!

凝残月

Objective-C 开发的速度其实挺快的,尤其是对于熟悉 C++ 的人来说。

    有7位网友表示赞同!

一纸愁肠。

现在很多 iOS 学习资料都包含了 Objective-C 的内容...

    有16位网友表示赞同!

纯情小火鸡

Objective-C 有一定的历史包袱,有些部分我觉得不太好用...

    有13位网友表示赞同!

红玫瑰。

老项目都是用 Objective-C 写的,维护起来还好。

    有13位网友表示赞同!

景忧丶枫涩帘淞幕雨

虽然 Swift 很好用,但还是有点怀念 Objective-C 的感觉...

    有16位网友表示赞同!

月下独酌

Objective-C 和 Swift 可以完美融合呢!很多复杂的 iOS 项目都采用了两者!

    有18位网友表示赞同!

人心叵测i

想深入了解 iOS 的底层机制,Objective-C 是要学的一部分

    有20位网友表示赞同!

心脏偷懒

Objective-C 做游戏也是很好的选择啊!

    有14位网友表示赞同!

拉扯

其实 Objective-C 本身很强大,只是语法比较传统了。

    有12位网友表示赞同!

半梦半醒i

有很多 Objective-C 库可以提升开发效率!

    有6位网友表示赞同!

瑾澜

Objective-C 的社区也挺活跃的,很多问题都能找到解答。

    有7位网友表示赞同!

醉红颜

iOS 开发真好玩!学习 Objective-C 让我对手机开发有更深刻的理解...

    有17位网友表示赞同!

♂你那刺眼的温柔

最近在看一些关于 Objective-C 的书籍,感觉很有收获!

    有14位网友表示赞同!

慑人的傲气

Objective-C 给我的编程思维带来了很大的提升!

    有19位网友表示赞同!

【深入解析iOS开发:Objective-C技术详解】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活