首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Objective-C属性有点不方便?

这个问题涉及到Objective-C语言的属性(property)特性,以及它在某些情况下的不便之处。Objective-C是一种面向对象的编程语言,主要用于苹果的iOS、macOS等操作系统的开发。

Objective-C属性是一种特殊的变量,它提供了一种简便的方法来声明和管理对象的属性。属性可以自动生成访问器方法(getter)和设置器方法(setter),以及一些其他的辅助方法。这使得开发者能够更加高效地管理对象的属性,并且能够更好地遵循面向对象编程的原则。

然而,Objective-C属性在某些情况下也存在一些不便之处。例如,当需要处理大量的属性时,手动编写访问器和设置器方法可能会变得非常繁琐和重复。此外,Objective-C属性的语法也比其他编程语言(如Swift)更加复杂和难以理解。

总的来说,Objective-C属性提供了一种便捷的方式来管理对象的属性,但在某些情况下也存在一些不足之处。为了解决这些问题,苹果推出了Swift编程语言,它提供了更加简洁和易于理解的属性语法,以及更加强大和灵活的属性管理功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Objective-C中的属性机制

Objective-C 2.0中的属性机制为我们提供了便捷的获取和设置实例变量的方式,也可以说属性为我们提供了一个默认的设置器和访问器的实现。...在学习OC中属性之前我们先要知道为什么要为变量实现getter和setter方法,我们先来了解一下实例的作用域。     实例变量的作用域如下:         1....下面我们要学习一下OC中的属性机制。         ...属性的定义和实现         1.属性的定义        属性的定义用编译器命令@property来定义,比如要为私有的变量 int a;定义getter和setter方法,@property int...,直接在接口文件中吧{}省略掉,直接用@property来定义方法,省去实现文件中的@synthesize, 访问属性时用_propertyName, 给属性赋值时用self.propertyName

1.3K70

Objective-C属性(property)的特性(attribute)

Objective-C做过开发的朋友都知道,类里面的属性(可以近似地理解为类的变量)是用@property关键字定义的,然后@property后面的括号,会写上若干「特性(attribute)」,后面跟数据类型...现在大伙儿慢慢转向苹果的新开发语言Swift,似乎亦不必花太多时间在Objective-C上。...不过那种一知半解,不明就里的感觉,有点如鲠在喉,不甚舒服,所以花了点时间,research了一番: 为什么要有@property?...在2006年的WWDC大会上,苹果发布了Objective-C 2.0,其中就包括Properties这个新的语法,把原来的实例变量定义成Properties(属性)。...因此,写getter和setter,可算是Objective-C中「约定俗成」的做法了。

1.8K30

属性“__attribute__”在Objective-C中的应用

属性“__attribute__”在Objective-C中的应用       关于__attribute__,你可能用的不多,但是一定经常见到,在系统的Foundation框架中,__attribute...__attribute__根据其修饰的场景不同可以分为3种类型,分别为函数属性,变量属性和类型属性。...autoreleasepool { NSLog(@"main函数执行"); } return 0; } 7. objc_subclassing_restricted       这是Objective-C...8. objc_requires_super       这个属性用来修饰Objective-C中父类的方法,如果子类进行了重写,在重写的方法中没有调用父类方法,则会进行编译器提示。...11. objc_runtime_name       这是一个很有趣的属性,其可以运行时改变Objective-C类的类名,但是不会影响其行为。

2.2K20

Objective-C中通过下标的方式访问自定义数据模型中属性

Objective-C中通过下标的方式访问自定义数据模型中属性       在Objective-C中,可以通过下标来访问数组中的元素,如果数组是NSMutableArray类型的可变数组,则还可以通过下标来对数组中的元素进行赋值操作...NSMutableArray alloc]init];     array[0] = @"one";     NSString * str = array[0];     NSLog(@"%@",str);        对于Objective-C...    dic[@"name"] = @"name";     NSLog(@"%@",dic[@"name"]);       对于开发者自定义的的数据结构,一般会采用getter与setter方法来对其属性进行访问...NSUInteger)idx {     return [self valueForKey:[NSString stringWithFormat:@"_index%lu",idx]]; } //通过下标设置属性值...index{     [self setValue:anObject forKey:[NSString stringWithFormat:@"_index%lu",index]]; } //通过键值下标获取属性

95210

属性动画为什么不能移植到 Jetpack Compose?

Android 的属性动画,是很好用的:又强大,又简单。然而在 Jetpack Compose 里,属性动画这一套东西却没有移植过去。 为什么?...属性动画和 Compose 动画的本质区别 Android 的属性动画,实质上是对 View 的属性做渐变,也就是连续不断地修改 View 对象的属性值。...真正的原因 那……为什么要换一种写法,而不继续沿用属性动画呢?就是我刚才说的:属性动画是「拿到 View 对象,操作对象的属性」,而 Compose 里已经没有可以拿到的界面元素的对象了。...那又为什么啊?为什么不让我们拿到?——这又要回到那个词了:「声明式」。Compose 的界面是声明式的,它的核心理念就是让开发者去描述界面,而不是操作界面组件。...所以,为什么属性动画没有被移植到 Compose 来?因为 Compose 里拿不到界面元素的对象,从而导致属性动画的整个理论模型不再适用了。

55830

译文: 低调奢华有内涵的「Runtime」

你又错了:这次要聊的是我们的老相好——Objective-C!(译者:这篇文章发表于2016年10月4日,那时候刚更新Xcode8) 为什么还要聊OC?...Swift3.0不是要干死Objective-C了吗? 此言差矣。Swift虽是天天上头条,但是并不意味着已经完全把曾经和我们朝夕相处的老相好干翻了。为什么非得要互怼,就不能一起愉快滴玩耍吗?...事实上,苹果还特别声明: 「当你用Objective-C编程的时候,并不需要用到Runtime库」 这就很容易理解为什么有人会这样说:在不了解Objective-C Runtime下去使用它,将会是危险的...而像Objective-C这类动态语言,就有点不一样了。所有的决定都是在Objecitve-C的Runtime库创造的。正因为有了这个库,我们可以自己操纵方法的调度和类型的绑定。...实现原理是:Objective-C的Runtime,会在「运行时」读取对象的属性,并填充从JSON获取的值。

94140

为什么不推荐使用BeanUtils属性转换工具

1 背景 之前在专栏中讲过“不推荐使用属性拷贝工具”,推荐直接定义转换类和方法使用 IDEA 插件自动填充 get / set 函数。...不推荐的主要理由是: 有些属性拷贝工具性能有点差 有些属性拷贝工具有“BUG” 使用属性拷贝工具容易存在一些隐患(后面例子会讲到) 2 示例 首先公司内部就遇到过 commons 包的 BeanUtils...打断点可以看到,属性拷贝之后 B 类型的 second 对象中 ids 仍然为 Integer 类型: 如果不转换为字符串,直接进行打印,并不会报错。...如果我们在 A 类中添加一个 String number 属性,在 B 类中添加一个 Long number 属性,使用 mapstruect 当 number 设置为非数字类型时就会报 .NumberFormatException...之前对各种属性映射工具的性能进行了简单的对比,结果如下: 因此慎用属性转换工具,如果可能建议自定义转换类,使用 IDEA插件自动填充,效率也挺高, A 或 B 中任何属性类型不匹配,甚至删除一个属性

75020

为什么不推荐使用BeanUtils属性转换工具

1 背景 之前在专栏中讲过“不推荐使用属性拷贝工具”,推荐直接定义转换类和方法使用 IDEA 插件自动填充 get / set 函数。...不推荐的主要理由是: 有些属性拷贝工具性能有点差 有些属性拷贝工具有“BUG” 使用属性拷贝工具容易存在一些隐患(后面例子会讲到) 2 示例 首先公司内部就遇到过 commons 包的 BeanUtils...如果我们在 A 类中添加一个 String number 属性,在 B 类中添加一个 Long number 属性,使用 mapstruect 当 number 设置为非数字类型时就会报 .NumberFormatException...之前对各种属性映射工具的性能进行了简单的对比,结果如下: ?...因此慎用属性转换工具,如果可能建议自定义转换类,使用 IDEA插件自动填充,效率也挺高, A 或 B 中任何属性类型不匹配,甚至删除一个属性,编译阶段即可报错,而且直接调用 get set 的效率也是非常高的

1.6K30

自学Swift之路(零)前言

更何况,现在Objective-C由LLVM Clang开源组织亲自维护,在LLVM Clang 3.7中都加入了NSValue字面量的扩展,更何况Xcode 8又增加了Objective-C的类属性语法特征...首先,不管Swift到底能不能彻底取代OC,上面那位老兄的说法是说不可能,但放在现实环境,一家公司要用你,为什么不要求你使用逼格更高的Swift呢?...还有人说我不学Swift,OC是世界上最优雅的语言...好吧,(我有点想笑)我承认OC确实是很优雅的,但Swift有没有搞头这个不是我和你能说了算的,创始人不在不一定就说这门语言没搞头了,你看人Java...不就发展得好好的吗...其次,为什么大家都对Swift持抵触态度呢?...为什么偏偏要先学别的语言而且学了半天就只会写hello world呢? 好吧,还是认真对待一下Swift吧,OCers!

1.2K130

Objective-C 中的点符号一定是恶魔吗?

本文是Objective-C 中的代码气味系列文章中的一篇。* ......是的,这是夸张的说法。在有点符号的项目中,我确实能与点符号共存。但我不会自己写。...Objective-C 是 C 语言的严格超集,因此所有这些也适用于 Objective-C 代码。或者不适用。......你说不清楚,对吧?...但为什么呢?"因为数组不是属性,而是方法"。哦,所以用括号还是用点取决于这个东西是不是属性?但不管用哪种方式,都是传递消息!为什么还要添加第二种消息传递语法呢?...让我们用点符号来取代方括号吧;这样看起来就像 Java 了,这样就能提高 Objective-C 的采用率。 但在接触 Objective-C 之前,我并不是一名 Java 开发人员。...现在来看看 Objective-C。在点符号这个邪恶的新大陆上,你经常会看到这样的情况: self.qux = 10; 其中 qux 是一个属性

7010
领券