博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
object -c OOP , 源码组织 ,Foundation 框架 详解1
阅读量:5260 次
发布时间:2019-06-14

本文共 5940 字,大约阅读时间需要 19 分钟。

 object -c  OOP ,  源码组织  ,Foundation 框架 详解1

1.1 So what is OOP? OOP is a way of constructing software composed of objects. Objects are like little machines living inside your computer and talking to each other to get work done.

oop 就是由对象构成的软件。 对象就像一些小的机器存在在你的电脑中,通过相互对话来进行工作。 

 

1.2 Source File organization 

If you use .mm for the file extension, you're telling the compiler you've written your code in Objective-C++, which lets you use C++ and Objective-C together.

如果你用.mm文件,那么你在告诉编译器你在用oc++ 在写代码。

 

1.3 

 1.3.1  a quick tour of the foundation kit 

Foundation framework has a bunch of useful low-level, data-oriented classes and types. We'll be visiting a number of these, such as NSString, NSArray, NSEnumerator, and NSNumber.

基础框架 有一系列低层次,面向数据的类和类型。

 

Foundation framework is built on top of another framework called CoreFoundation.

基础框架建立在核心框架之上。

If you come across function names or variable names that start with "CF," they are part of CoreFoundation.

Most of them have equivalents in Foundation framework, and some of them can be easily converted from one to the other.

 

1.3.2   Some useful types 

home on the range 

 

typedef struct _NSRange

{

 unsigned int location;

 unsigned int length;

} NSRange;

 

First, you can assign the field values directly:

NSRange range;

range.location = 17;

range.length = 4;

Second, you can use the C aggregate structure assignment mechanism (doesn't that sound impressive?):

NSRange range = { 17, 4 };

Finally, Cocoa provides a convenience function called NSMakeRange():

NSRange range = NSMakeRange (17, 4);

1.3.3 Geometric types 

You'll often see types that deal with geometry and have the prefix "CG," such as CGPoint and CGSize. These types are provided by the Core Graphics framework, used for 2D rendering.

CG prefix . 这些类型由 核心图形库框架提供。 用作2d 展示。

 

CGPoint represents an (x, y) point in the Cartesian plane:笛卡尔坐标系坐标

struct CGPoint

{

float x;

float y; };

CGSize holds a width and a height:

宽和高

struct CGSize

{

float width;

 float height;

};

 

Cocoa provides a rectangle type, which is a composition of a point and a size:

struct CGRect

{

 CGPoint origin;

 CGSize size;

};

Cocoa gives us convenience functions for making these bad boys too: CGPointMake(), CGSizeMake(), and CGRectMake().

 

1.3.4 String us along 

Cocoa's NSString has a bunch of built-in methods that make string handling much easier.

NSString 有许多内在方法让我们处理字符串更容易。

 

1.3.4.1Build That String 

NSString's stringWithFormat: method creates a new NSString just like that, with a format and arguments:

When you declare a method with the plus sign, you've marked the method as a class method.

当你声明方法前有+号时, 你标注了该方法为类方法。

Class methods used to create new objects are called factory methods.

类方法通常用来创建新对象,被称作工厂方法。

 

1.3.4.2 Size matters 长度问题

Another handy NSString method (an instance method) is length, which returns the number of characters in the string:

-(NSUInteger)length;

 

NSUInteger length=[height length];

 

1.3.4.3 Comparative Politics  比较策略

isEqualToString: compares the receiver (the object that the message is being sent to) with a string that's passed in as an argument. isEqualToString: returns a BOOL (YES or NO) indicating if the two strings have the same contents. It's declared like this:

- (BOOL) isEqualToString: (NSString *) aString;

To compare strings, use the compare: method, which is declared as follows: - (NSComparisonResult) compare: (NSString *) aString;

[@"aardvark" compare: @"zygote"] would return NSOrderedAscending.

 

1.3.4.4Insensitivity Training

compare: does a case-sensitive comparison. In other words, @"Bork" and @"bork", when compared, won't return NSOrderedSame. There's another method, compare:options:, that gives you more control:

- (NSComparisonResult) compare: (NSString *) aString

    options: (NSStringCompareOptions) mask;

For example, if you want to perform a comparison ignoring case but ordering numbers correctly, you would do this:

if ([thing1 compare: thing2 options: NSCaseInsensitiveSearch | NSNumericSearch]

    == NSOrderedSame)

{

  NSLog (@"They match!");

}

 

1.3.4.5 Is it inside ? 在里面吗

the first checks whether a string starts with another string, and the second determines if a string ends with another string:

- (BOOL) hasPrefix: (NSString *) aString;

- (BOOL) hasSuffix: (NSString *) aString;

And you'd use these methods as follows:

NSString *fileName = @"draft-chapter.pages";

if ([fileName hasPrefix: @"draft"])

{

  // this is a draft

}

if ([fileName hasSuffix: @".mov"])

{

  // this is a movie

}

If you want to see if a string is somewhere inside another string, use rangeOfString: - (NSRange) rangeOfString: (NSString *) aString;

NSRange range = [fileName rangeOfString: @"chapter"];

1.3.4.6 Mutability

NSStrings are immutable.Cocoa provides a subclass of NSString called NSMutableString. Use that if you want to slice and dice a string in place.

You can create a new NSMutableString by using the class method stringWithCapacity:, which is declared like so:  

可以用类方法 创建NSMutableString

+ (id) stringWithCapacity: (NSUInteger) capacity;

The capacity is just a suggestion to NSMutableString, like when you tell a teenager what time to be home.

这个容量只是个建议,就像你告诉年轻人什么时候回家。

Once you have a mutable string, you can do all sorts of wacky tricks with it. A common operation is to append a new string, using appendString: or appendFormat:, like this:

- (void) appendString: (NSString *) aString;

- (void) appendFormat: (NSString *) format, ...;

NSMutableString *string = [NSMutableString stringWithCapacity:50];

[string appendString: @"Hello there "];

[string appendFormat: @"human %d!", 39];

You can remove characters from the string with the deleteCharactersInRange: method:

 - (void) deleteCharactersInRange: (NSRange) aRange;

 

NSMutableString *friends = [NSMutableString stringWithCapacity:50];

[friends appendString: @"James BethLynn Jack Evan"];

NSRange jackRange = [friends rangeOfString: @"Jack"];

jackRange.length++; // eat the space that follows

[friends deleteCharactersInRange: jackRange];

 

 

 

 

 

 

转载于:https://www.cnblogs.com/ljlkfx/p/4478317.html

你可能感兴趣的文章
Mysql的limit用法
查看>>
mysql基础(五)之pymysql
查看>>
lintcode-medium-Gas Station
查看>>
GitHub
查看>>
WPF先暂停一下
查看>>
POJ-1322 Chocolate 概率DP
查看>>
设计模式之六(装饰模式)
查看>>
#6435. 「PKUSC2018」星际穿越
查看>>
(转)Mac OS X内核编程,MAC驱动开发资源汇总
查看>>
抖音很火的告白编程程序,C语言一样也能做
查看>>
promethus监控nginx
查看>>
java读取文本文件内容
查看>>
flask源码解读06: Session(会话)
查看>>
Rabbitmq_02 Work Queues
查看>>
mysql表数据的增删改查
查看>>
指向对象的指针
查看>>
路飞学城Python-Day152
查看>>
A Peer-to-Peer Information System Based on the XOR Metric 部分翻译
查看>>
Sublime Package Control
查看>>
使用jquery的delay方式模拟sleep
查看>>