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

目标C:为什么NSUInteger上的接收器类型无效而非NSString,而创建方式相同

在Objective-C中,NSUInteger是一种无符号整数类型,用于表示数组、集合等的索引或计数。它是一种基本数据类型,而不是一个接收器类型。因此,无法将NSUInteger作为接收器类型来调用方法或发送消息。

相反,NSString是Objective-C中的一个类,用于表示字符串对象。它是一个有效的接收器类型,可以调用该类定义的方法或发送消息给该对象。

在创建方式上,无论是NSUInteger还是NSString,都可以使用相同的方式进行创建。NSUInteger可以通过直接赋值或使用NSNumber进行初始化来创建。例如:

代码语言:objective-c
复制
NSUInteger index = 0;
NSNumber *number = @(index);

NSString可以通过直接赋值或使用NSString类方法进行初始化来创建。例如:

代码语言:objective-c
复制
NSString *string = @"Hello World";
NSString *anotherString = [NSString stringWithFormat:@"The index is %lu", (unsigned long)index];

需要注意的是,NSUInteger是一种基本数据类型,而NSString是一个类。它们具有不同的特性和用途,因此在使用时需要根据具体情况选择合适的类型。

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

相关·内容

编程规范之《招聘一个靠谱的iOS》

age 属性的类型:应避免使用基本类型,建议使用 Foundation 数据类型,对应关系如下: int -> NSInteger unsigned -> NSUInteger float -> CGFloat...动画时间 -> NSTimeInterval 同时考虑到 age 的特点,应使用 NSUInteger ,而非 int 。...见: Log in vs. login ) 登录操作属于业务逻辑,观察类名 UserModel ,以及属性的命名方式,该类应该是一个 Model 而不是一个“ MVVM 模式下的 ViewModel ”...(原因在下文有详细论述:用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?)...而快捷构造方法的返回值,建议为 instancetype,为保持一致性,init 方法和快捷构造方法的返回类型最好都用 instancetype。

64270

iOS-Foundation框架中常用的类

NSString NSString创建与内存存储 NSString是1个数据类型,用来保存OC字符串,NSString的本质是1个类,既然是1个类,所以,最标准的创建NSString对象的方式如下: NSString...; 使用这种方式创建的字符串是1个空的字符@""。...NSString是OC中最常用的1个类了,所以OC提供了一种更为快速的创建字符串对象的方式:使用前缀@ @"jack";本质上这是1个NSString对象,这个NSString对象中存储的是"jack...str1与str2指向相同的地址 注意:存储在常量区的数据不会被回收. 所以存储在常量区的字符串对象也不会被回收. NSString类的常用方法 使用拼接的方式创建1个NSString对象。...@property (readonly) NSUInteger length; 得到字符串中指定下标的字符,返回值是unichar类型的 要打印的话使用%C。

1.7K100
  • 对象、消息、运行期--8:对象等同性isEqual:、hash

    对象等同性 对象的等同性 :我们在使用对象的时候,往往需要判断两个对象是否相等,这种相等包含两种含义: 在程序上是否是同一块内存地址 在语义上,是否能指代同一对象 NSString *str = @...2、判断俩个对象所属类是否相同 3、判断每个属性是否相同 -(NSUInteger)hash 为什么要hash方法?...,和数组相比,基于hash值索引的hash Table查找某个成员的过程就是 step1:通过hash值直接找到查找目标的位置 step2:如果目标位置上有多个相同hash值成员,此时再按照数组方式查找...检测方式是先看俩个数组所含对象个数是否相同,如果相同,那么每个位置的俩个对象身上调用isEqual方法,如果对应位置相等,那么俩个数组就相等,这种方式叫深度等同性判断 如果我们的Person类的实例是根据数据库的数据创建的...+Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法

    14610

    iOS @property探究(一): 基础详解你要知道的@property都在这里

    属性(property)提供了一种安全、便捷的方式来与这些属性(attribute)交互,而不需要手动编写一系列的访问方法,如果需要的话可以自定义getter和setter方法来覆盖编译器自动生成的相关方法...@property基本用法 手工创建getter与setter @interface Person : NSObject { NSString *_name; NSUInteger _age...当有很多变量需要设置时,这样手工创建setter和getter的方式难免很繁琐,因此合成存取方法就诞生了。...copy方法获取一个不可变对象,因此p.name的地址和s的地址不同,而p.name运行时类型为NSString,调用appendString:方法会抛出异常。...前文介绍copy修饰符的时候讲过,在修饰NSString这样的不可变对象的时候使用copy修饰,但其实当给对象赋一个NSString时仍旧只复制了指针而不是拷贝内容,原因同上。

    1.7K90

    一份走心的iOS开发规范

    属性/函数/参数/变量/常量/宏 的命名应该具有上下文或者全局的一致性,相同类型或者具有相同作用的变量的命名方式应该相同或者类似。...方法的命名也应该具有上下文或者全局的一致性,相同类型或者具有相同作用的方法的命名方式应该相同或者类似。 // 该方法同时定义在NSView、NSControl、NSCell这三个类里面。...你也可以使用const来创建和其他常量不相关的整型常量。否则,请使用枚举类型来创建。即,如果一个整型常量和其他常量不相关,可以使用const来创建,否则,使用枚举类型表示一组相关的整型常量。...block中的return代表的是使当前的block返回,而非使当前的整个函数体返回。以下使用NSArray举例,其他集合类型同理。...说明:异步线程默认是没有runloop的,除非手动创建;而主线程是系统会自动创建Runloop的。所以在异步线程调用是请先确保该线程是有Runloop的。

    12.1K145

    Objective-C中NSArray类的解读

    :(NSUInteger)index; //初始化方法 - (instancetype)init; //通过C语言风格的数组创建NSArray对象 需要注意,C数组中需要为Objective对象,cnt...参数为C数组的长度 //如果cnt的值小于C数组的长度,则会对C数据进行截取赋值,如果大于则程序会崩溃 - (instancetype)initWithObjects:(const ObjectType...)range; //获取与给定元素相同的元素在数组中的最小下标值 - (NSUInteger)indexOfObjectIdenticalTo:(ObjectType)anObject; //在一定范围内...获取与给定元素相同的元素在数组中的最小下标值 - (NSUInteger)indexOfObjectIdenticalTo:(ObjectType)anObject inRange:(NSRange)...idx, BOOL *stop))block NS_AVAILABLE(10_6, 4_0); //通过遍历的方式查找符合条件的元素下标 - (NSUInteger)indexOfObjectPassingTest

    1.3K20

    【IOS开发进阶系列】IOS常用开发技巧专题

    怎么说尼,笔者认为这个还是比较有用滴,为什么有用尼?     因为在Xcode断点调试的时候, 在控制台输入 po self.view.frame 或者 po id 类型的时候就死翘翘了。     ...如果po指令是一个id类型也可以正常打印。是不是感觉方便很多呀? 反正我是这么觉得。至于有没有用就看个人需要咯~~! 如何删除? 好吧, 那么问题来了, 我用命令创建, 如果不想玩了怎么办尼??..., 而不会输出形参名).若用gcc编译C程序,__PRETTY_FUNCTION__跟__FUNCTION__的功能相同....代码基础 5.1     数据类型相关 5.1.1 Objective-C中的instancetype和id区别     instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型!...1、相同点     都可以作为方法的返回类型 2、不同点 ①instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象; ②instancetype只能作为返回值,不能像id

    45940

    id类型和instancetype类型

    这些方法被称为“有一个关联的返回类型”的方法,也就是说发给这些方法中的任意一个的消息都会返回一个以相同的静态类型代替接收类类型的一个实例,例如: @interface NSObject + (id)alloc...类似的,表达式[[NSArray alloc] init]也是NSArray *类型,因为init的返回类型也是一个关联的返回类型,同时也知道它的接收器有一个NSArray *的类型。...实际上,Apple对于这个主题是这么解释的: 在你的代码中,在合适的地方用返回类型instancetype代替id类型。这通常出现在init方法和类的工厂方法。...不过,还是有其他例子存在,比如length方法,在UILayoutSupport中返回CGFloat,在NSString里返回NSUInteger 对于初始化器,这个就更加复杂了。...见前面instancetype的定义。 这也就是为什么很多人会说使用instancetype不是必须的。当然我认为你还是应该去这么写。下面会解释为什么: 这有三个好处: 明确性。

    1.9K10

    iOS中的「回调(callback)」

    Objective-C中有4种途径可以实现回调: 1、Target-action/目标-动作对 先看代码: // 为按钮添加回调——Target-action/目标-动作对 // 第一个参数:发送消息给谁.../目标-动作对 // 第一个参数:发生哪种类型的点击事件会触发回调(这里表示2秒后触发回调) // 第二个参数:发送消息给一个Logger实例(Logger是自定义的类) // 第三个参数:事件发生后,...而书上是这样描述的:「当某事件发生时,向遵守相应协议的辅助对象发送消息。」...// 在文件顶部(#import之下)用typedef将Block重新定义为一种新的数据类型 typedef void(^YourBlockName)(id, NSString *, NSUInteger...import CoreBluetooth; // 步骤1: // 将Block重新定义为一种新的数据类型 // 这个Block无返回值;有一个参数(类型为NSUInteger) typedef void

    3.5K30

    面经之《招聘一个靠谱的iOS》import CYLBlockExecutor.himport CYLBlockExecutor.himport CYLNSObject+RunAtDeallo

    而在正规的 Objective-C 编码风格中,存取方法有着严格的命名规范。 正因为有了这种严格的命名规范,所以 Objective-C 这门语言才能根据名称自动创建出存取方法。...getter 方法也会以 init 开头,而编译器会把所有以 init 开头的方法当成初始化方法,而初始化方法只能返回 self 类型,因此编译器会报错。...什么时候会报unrecognized selector的异常? 简单来说: 当调用该对象上某个方法,而该对象上没有实现这个方法的时候, 可以通过“消息转发”进行解决。...每个 Objective-C 对象都有相同的结构,如下图所示: enter image description here 翻译过来就是 Objective-C 对象的结构图 ISA指针 根类的实例变量...这也就是为什么说“不推荐在 init 方法中使用点语法”,如果想访问实例变量 iVar 应该使用下划线( _iVar ),而非点语法( self.iVar )。

    1K100

    编码篇-开发中关于数字的那些事儿

    为什么使用floatValue、doubleValue 转化后的数据会出现误差。 要回答这点,我们先要明白这是浮点数在计算机中的存储方式就决定的。先来了解下浮点数在计算机中的存储方式。...至于想知道为什么是 -128-127而不是 -127-127的同学可以看这里 为什么8位的二进制补码范围是-128-127,而不是-127-127 。...单精度浮点数8.25的存储方式 其中float的存储方式如下图所示: ? float类型的存储方式 而 double 的存储方式为: ?...如何愉快与数字玩耍 酌情避免使用 float ,更多地使用 double float类型的最大容量是8位(大于15万的浮点数字就会出现不精确了(笔者做过遍历测试),而double类型的容量为16位(...NSDecimal是C语言级别的无法直接创建,不幸的是,基础框架没有直接创建的方法,你只能先创建生成一个 NSDecimalNumber 再得到对应的 NSDecimal。

    1.2K10

    iOS_Effective Objective-C 20 编写高质量iOS与OS X代码的52个有效方法

    想要声明一个变量,令其指代某个对象,可用如下语法: NSString *string = @"Hello world"; ​ 这种语法基本上是照搬C语言的,它声明了一个名为string的变量,其类型是NSString...,而应提供相关方法修改对象中的可变collection 19、使用清晰而协调的命名方式 1、方法命名: 如果方法的返回值是新创建的,那么方法名的首个词应该是返回值的类型。...domain定义成NSString类型的全局常量,而code则定义成枚举类型为佳。...分类的目标在于扩展类的功能,而非封装数据。 ​ 但有时候只读属性还是可以在分类中使用的。如:为NSCalendar类创建分类,返回各个月份名称数组。虽说仅是访问数据不需要实例变量来实现。...这种情况下,运行期系统会吧消息发到新对象那里,而此对象也许能应答,也许不能。如果能,那么程序就不崩溃,可你会觉得奇怪:为什么收到消息的对象不是预想的那个呢?

    1.1K40

    iOS @property探究(二): 深入理解你要知道的@property都在这里

    你要知道的@property都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 上一篇文章iOS @property探究(一):基础详解介绍了...,如有兴趣可以参考iOS 深入代码理解类对象)你只需要知道这个Person就是我们创建的类对象就好了,这个类对象包含了Person类所需的所有东西,包括属性、方法列表、版本号等一系列信息。...这两个值是运行时计算出偏移量硬编码(hard code)写入的,这样的好处在于,如果你使用了一个库,这个库的类定义比较旧,而链接的代码使用的是版本较新的代码,增加了几个实例变量,你的程序运行时也不会报错...如果不使用合成存取方法定义实例变量而使用手工的方式创建,这个偏移量就是编译器计算出硬编码写到代码中的,如果类定义和链接库的版本不一致则可能发生指针错误,因此鼓励大家尽量都使用合成存取方法。...从结构体中的值不难看出,属性描述中的T@表示是类型对象后接类型名称,C表示copy,N表示nonatomic,V_cjmName表示实例变量。

    1K70

    利用Runtime实现简单的字典转模型

    回归到我们拿到这些属性类型的初衷,是为了用字典中的值的类型与模型中属性的类型进行对比,想要对比,需要拿到属性的类型,因此需要将这些编码转换成一个表示类的类,创建一个类用来包装类型。...(nonatomic, readonly) Class typeClass; @end OC对象可以通过Class来表示类型,而基本数据类型只能用布尔来标识。...把这些名字和类型遍历出来,肯定是为了以后有用,所以需要把它们存起来,由于它们是一个"整体",所以还是设计一个类将他们包装起来比较好,创建一个包装成员属性的类--ScottProperty。...= @"c"; NSString *const ScottPropertyTypeBOOL1 = @"c"; NSString *const ScottPropertyTypeBOOL2...当模型的属性是char类型或者bool类型时,获取到的编码都是c,并且bool还有可能是B编码,它们都对应_boolType,因为数字类型包含布尔类型,所以bool类型要在数字类型的条件下进行额外判断。

    1.9K60

    利用Runtime实现简单的字典转模型

    回归到我们拿到这些属性类型的初衷,是为了用字典中的值的类型与模型中属性的类型进行对比,想要对比,需要拿到属性的类型,因此需要将这些编码转换成一个表示类的类,创建一个类用来包装类型。...(nonatomic, readonly) Class typeClass; @end OC对象可以通过Class来表示类型,而基本数据类型只能用布尔来标识。...把这些名字和类型遍历出来,肯定是为了以后有用,所以需要把它们存起来,由于它们是一个"整体",所以还是设计一个类将他们包装起来比较好,创建一个包装成员属性的类--ScottProperty。...= @"c"; NSString *const ScottPropertyTypeBOOL1 = @"c"; NSString *const ScottPropertyTypeBOOL2...当模型的属性是char类型或者bool类型时,获取到的编码都是c,并且bool还有可能是B编码,它们都对应_boolType,因为数字类型包含布尔类型,所以bool类型要在数字类型的条件下进行额外判断。

    1.2K30

    SDWebImage 图片下载缓存框架 常用方法及原理

    NSCache SDImageCache内处理内存警告,以通知的方式,clearMemory cleanDisk的执行过程 i....(例如更新头像),专门处理相同url,但不同image的情况的 原因:默认情况下,SDWebImage会忽略Header中的缓存设置,将图片以url为key进行保存,url与图片是一一对应关系。...*)sharedImageCache; 2、创建缓存空间 在沙盒的cache目录下创建一个指定名字的缓存空间(文件夹) - (id)initWithNamespace:(NSString *)ns;...在磁盘指定目录(directory)下创建一个指定名字的缓存空间 - (id)initWithNamespace:(NSString *)ns diskCacheDirectory:(NSString...void)cleanDisk; 8、获取缓存大小、缓存个数 获取磁盘缓存大小 - (NSUInteger)getSize; 获取磁盘上缓存图片的个数 - (NSUInteger)getDiskCount

    3.2K40

    常量和枚举

    在预处理器里进行文本替换,没有类型,不做任何类型检查,编译器可以对相同的字符串进行优化。只保存一份到 .rodata 段。...,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝 如果在一个指定单一类里声明常量...参考 苹果官方文档介绍编码规范提到常量部分:链接 对于一组相关的整型常量,应使用枚举类型 使用const创建浮点型常量。...因为它们有更强大的类型检查和代码补全。此外,这个语法提供枚举的方式也兼容旧编译器,当然新编译器可以更好的解析出其隐含的类型信息。...一般来说选项的类型是 NSUInteger。

    53020
    领券