zoukankan      html  css  js  c++  java
  • 数据类型/对象类型介绍(1)NSString

     
字符串是程序设计最常用的数据类型之一了。在Mac/iPhone编程中,苹果为我们提供了一个不同的字符串类型NSString。有别与普通的String为数据类型,NSString其实是一个对象类型。NSString是NSObject(Cocoa Foundation的基础对象)的子类,所以具有NSObject的所有特性,好的和好的… ….

    代码
    小常识:
    NS是Cocoa类对象类型的前缀,来源于史蒂夫
    -乔布斯被苹果开除那段时间建立的公司NeXT.
    @是Cocoa元素的前缀,很多地方我们会看到,比如接下来...
    1, 创建一个NSString对象

    简单方法:

    NSString
    *aString = @"我是个NS字符串!"; //除了引号外加@, 没别的区别
    *上面的不需要操心内存管理哟~

    复杂一点儿:(需要内存管理的)

    NSString
    *aString = [[NSString alloc] initWithFormat:@"这也是个NS字符串!"];
    *initWithFormat是其中一个初始化方法,常用的还有

    //从一个文件读取需要的内容
    - (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error
    //从一个地址读取需要的内容
    - (id)initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error
    *以上方法得到的NSString的retain值为1,所以记得release掉阿~~

    2,使用一个NSString对象

    NSString
    *aString = @"This is a NSString";

    NSLog(aString);
    //在控制台输出信息,该函数方法需要一个NSString对象作为参数

    NSLog(
    "这样不会好使的");

    NSLog(
    @"这样就会好使拉~");
    再比如设置一个UIView的标题:

    [UIView setTitle:aString];

    [UIView setTitle:
    @"标题"];

    UIView.title
    = aString;
    3,释放NSString

    [aString release];
    //对象将被系统释放掉咯
    *记得不要释放直接用 = @”xxx” 的NSString对象哟,系统会管的~

    4,快速使用一个NSString

    NSLog([NSString stringWithFormat:
    @"一个NS字符串"]);
    //这种快速方法返回的是一个retain为1,autorelease的对象,不需要操心它的内存管理

    5,常用方法

    我喜欢NSString的地方就在于很多方法非常方便,比如:

    nString
    = [aString substringToIndex:4]; //nString将得到aString中的前四个字符
    6,小结

    暂时能记起来的就这么些了,有机会再补充,希望大家NS的愉快~

    标签:NSString
    分类目录:
    01 - 基础信息, 01 - 基础信息, Cocoa开发, iPhone开发 | 1 条评论
    64位编程:整数
    /小数
    2009年06月24日,
    7:52 下午
    A 对应64位编程的时候,

    对于整数应使用NSInteger和NSUInteger,而非int

    对于小数应使用CGFloat,而非float

    NSInteger其实是一个自动定义,在32位中为int,而64位中为long。CGFloat的原理类似

    标签:64bit, CGFloat,
    int, NSInteger
    分类目录:
    01 - 基础信息, 01 - 基础信息, Cocoa开发, iPhone开发 | 评论
    属性项目的定义(property)
    2009年06月15日,
    6:31 下午
    @property (copy, nonatomic) NSString
    *title;
    什么是assign,copy,retain之间的区别?

    assign: 简单赋值,不更改索引计数(Reference Counting)。
    copy: 建立一个索引计数为1的对象,然后释放旧对象
    retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
    retain的实际语法为:

    - (void)setName:(NSString *)newName {
    if (name != newName) {
    [name release];
    name
    = [newName retain];
    // name’s retain count has been bumped up by 1
    }
    }
    说了那么麻烦,其实接下来的话最重要:

    ?如果你不懂怎么使用他们,那么就这样 ->

    使用assign: 对基础数据类型 (NSInteger,CGFloat)和C数据类型(
    int, float, double, char, 等等)
    使用copy: 对NSString
    使用retain: 对其他NSObject和其子类
    nonatomic关键字:

    atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

    标签:assign, atomic, copy, nonatomic, property, retain
    分类目录:
    01 - 基础信息, 03 - 自定义类, Cocoa开发, iPhone开发 | 1 条评论
    为什么不能直接调用dealloc而是release
    2009年06月15日,
    4:33 下午
    M 在看过CS193P的笔记后,以下是真正有用的句子:

    dealloc不等于C中的free,dealloc并不将内存释放,也不会将索引计数(Reference counting)降低。于是直接调用dealloc反而无法释放内存。

    在Objective
    -C中,索引计数是起决定性作用的。

    标签:dealloc, release
    分类目录:
    01 - 基础信息, 01 - 基础信息, 02 - Objective-C, 02 - Objective-C, 03 - 内存管理, Cocoa开发, iPhone开发 | 评论
    对比:id与NSObject
    2009年06月15日,
    3:54 下午
    N 以下是来自CS193P的笔记:

    1,id关键字在编译时不被检查,而NSObject在编译时会被检查是否被调用一些错误方法。

    2,id可以是任何对象,包括非NSObject对象

    3,定义id的时候不使用*,NSObject却需要。

    我的理解,基本上来讲,定义id类似于定义了一个地址(只有指针,抽象指针),而NSObject是确实的定义了一个逻辑对象的地址。

    一个来自CS193P笔记的链接:

    http:
    //unixjunkie.blogspot.com/2008/03/id-vs-nsobject-vs-id.html


    标签:id, NSObject
    分类目录:
    01 - 基础信息, 01 - 基础信息, Cocoa开发, iPhone开发 | 评论
    在子类(sub
    -class)中覆盖“初始化”和“默认”函数
    2009年06月14日,
    7:29 下午
    I 在CS193P中,Evan强调了以下问题:

    为什么要在覆盖init的时候需要检查是否在父类中作初始化,例如:

    - (id)init
    {
    if(self = [super init])
    {
    }
    }


    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
    // Custom initialization
    }
    return self;
    }
    主要是将本地对象用父类的init进行初始化,其中的等号“
    =”另一方面检查了是不是成功进行了初始化。CS193P提供了更多关于这个的信息:

    http:
    //cocoadev.com/index.pl?FactoryMethod

    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

    不仅仅是init等初始化对象,还有其他一些方法(Method)是需要对自己的父类打声招呼得,例如:

    - (void)viewDidLoad {
    [super viewDidLoad];

    }
    那这个没有super这句会怎么样呢?没事,一样用。这个是一个delegate,所以需要收听的类应该会收听到的。但是既然缺省的方法就是这么写的,我们也没有必要特意去删除掉这个super方法。
  • 相关阅读:
    使用某些 DOCTYPE 时会导致 document.body.scrollTop 失效
    VB.NET 笔记1
    知识管理系统Data Solution研发日记之一 场景设计与需求列出
    知识管理系统Data Solution研发日记之五 网页下载,转换,导入
    折腾了这么多年的.NET开发,也只学会了这么几招 软件开发不是生活的全部,但是好的生活全靠它了
    分享制作精良的知识管理系统 博客园博客备份程序 Site Rebuild
    知识管理系统Data Solution研发日记之四 片段式数据解决方案
    知识管理系统Data Solution研发日记之二 应用程序系列
    知识管理系统Data Solution研发日记之七 源代码与解决方案
    知识管理系统Data Solution研发日记之三 文档解决方案
  • 原文地址:https://www.cnblogs.com/lm3515/p/1913704.html
Copyright © 2011-2022 走看看