lecture 4 : More Objective-C

Creating Objects

这件事困扰我一点时间了,ObjC没有一个Constructor的概念
而在Create Objects这件事上既有用过自己写的-init,还return instancetype,大概这个,也有用过一些Class Method,就是明确知道是+id类型的,Slides总结了

  • alloc init来创建
NSMutableArray *cards = [[NSMutableArray alloc]init]
  • Class Method来创建
NSString *moltuae = [NSString stringWithFormat:@“%d”, 42];NSString *a = @"hello world";//不过一般应该都用这个吧
  • 也有init 和 Class Method共存的状况
[NSString stringWithFormat:...] same as [[NSString alloc] initWithFormat:...]

老爷爷推荐alloc/init

  • 利用objects的方法创建新的objects
NSString’s - (NSString *)stringByAppendingString:(NSString *)otherString; 
NSArray’s - (NSString *)componentsJoinedByString:(NSString *)separator; 
NSString’s & NSArray’s - (id)mutableCopy;//这个很有意思,将一个immutable的object变成一个mutable的新的object
  • 这种则不是在创建object,虽然传递出object
NSArray’s - (id)lastObject;
NSArray’s - (id)objectAtIndex:(int)index;

除非NSArray不存在才会创建出NSArray,但是也是nil吧


nil

nil很好用,只需注意struct状况


id

id是一个很特殊很特殊的pointer, It means “pointer to an object of unknown/unspecified” type.

所以其实之前写的

NSString *a = [NS....];

能被完全写成

id a = [NS....];

id很有用,但是有危险。
因为给的信息很通用,则complier难以察觉出语法上的问题。
但是运行的时候可能就崩溃!

Really all object pointers (e.g. NSString *) are treated like id at runtime.
But at compile time, if you type something NSString * instead of id, the compiler can help you.


Introspection

如果出现id,可以使用一下方法来保护自己:

isKindOfClass   (inheritance included)
isMemberOfClass  (no inheritance)
respondsToSelector
Class testing methods take a Class
You get a Class by sending the class method class to a class (not the instance method class).
这里可以这样做,感觉就是把NSString class生成为一个class,然后再来测试,因为classes也是objects,老爷爷怕大家迷茫,让大家记住这个用法就好了if ([obj isKindOfClass:[NSString class]]) {
    NSString *s = [(NSString *)obj stringByAppendingString:@”xyzzy”];
}

以下
这里的第一个shoot是没有参数的
第二个shootAt有一个参数,对于obj使用了target

Method有多个参数需要写成addCard:AtTop:类似

if ([obj respondsToSelector:@selector(shoot)]) {[obj shoot];
} else if ([obj respondsToSelector:@selector(shootAt:)]) {[obj shootAt:target];
}
SEL is the Objective-C “type” for a selector
SEL shootSelector = @selector(shoot);
SEL shootAtSelector = @selector(shootAt:);
SEL moveToSelector = @selector(moveTo:withPenColor:);

个人感觉这里的code将会有很大的用处,不过我目前还是暂时都不知了的状态

If you have a SEL, you can also ask an object to perform it ...Using the performSelector: or performSelector:withObject: methods in NSObject 
[obj performSelector:shootSelector];
[obj performSelector:shootAtSelector withObject:coordinate];Using makeObjectsPerformSelector: methods in NSArray
[array makeObjectsPerformSelector:shootSelector]; // cool, huh?
[array makeObjectsPerformSelector:shootAtSelector withObject:target]; // target is an id

In UIButton,
- (void)addTarget:(id)anObject action:(SEL)action ...; 
[button addTarget:self action:@selector(digitPressed:) ...];

Foundations

+----Primitive Data Types ---+-----Foundation Data Structures--------+
|       int                  |          NSNumber - generic           |
|       double               |          NSString                     |
|       float                |          NSArray                      | 
|       struct               |          NSSet                        |
|       struct               |          NSDictionary                 |
|       ...                  |          ...                          |
+----------------------------+---------------------------------------+

大概就是这样....
还有很多的Mutable版本,NSDate还有NSData...

再举了一些常用的Class Method


Colors & Fonts

因为木有例子存在,一直都听的磕磕碰碰,充满了困意

让我假装直到每个有关的几件事吧

UIColor

  • 可以设置alpha,我喜欢,透明度
  • 可以用RGB,HSB,甚至图片patten来定义color
  • [UIColor greenColor]有此种
  • [UIColor lightTextColor]也有此种

Fonts

UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];//用到user's contents里+ (UIFont *)systemFontOfSize:(CGFloat)pointSize;
+ (UIFont *)boldSystemFontOfSize:(CGFloat)pointSize;//用到button之类的

困意不断,我决定把NSMutableString以及这些相关的在demo时候再来复习/学习....
就是这么一个爱贪有趣的人....

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对象实体 参考标准

1usingSystem;2usingSystem.Data;34namespaceFramework.Components5{ 6 /**//// <summary> 7 /// 公告通知实体 8 /// </summary> 9 public class NoticeInfo 10 { 11 基础信息-------------------------------------------------------…

SerialPort comstat is being used without defining

Run-Time Check Failure #3 - The variable comstat is being used without being initialized. 参考&#xff1a;http://blog.sina.com.cn/s/blog_5d2412000100ojx3.html 方案1: 改变项目配置属性 一种解决方案是改变基本运行时检查&#xff08;changing the runtime checks i…

Leetcode:27. 移除元素

力扣题目链接 解题思路 首先很容易想到暴力解法,用两个for循环,第一个for循环用来遍历整个数组,第二个for循环用来更新数组.但这种解法的时间复杂度为O(n^2) 因此考虑双指针思想,通过一个快指针和慢指针在一个for循环下完成两个for循环的任务,其中,快指针用来寻找新的元素,即…

【原】简单shell练习(四)

1.查看已开启端口信息 #ss -ln 2.列出谁在使用某个端口&#xff08;如&#xff1a;80&#xff09; #lsof -i:80 3.显示文件夹下文件信息 #find /home/root -type f#find -type f 4.磁盘大小信息 #df -h #du -sh * 5.查看一个文件夹下文件总个数 # ls -l |wc -l 6.查看进程是否…

JavaScriptWindow使用对象

窗口对象的属性和方法&#xff1a;格式&#xff1a;[window.]属性[window.]方法&#xff08;参数&#xff09;opener.属性opener.方法&#xff08;参数&#xff09;self.属性self.方法&#xff08;参数&#xff09;parent.属性parent.方法&#xff08;参数&#xff09;top.属性…

无法在web服务器上启动调试 您不具备调试此应用程序的权限

一般用下面的方法可以解决: 1&#xff1a;确认在“配置属性”中的“启用ASP.NET调试"为"True" 2&#xff1a;确认你的"web.config"中的"debugtrue" 3&#xff1a;若你安装过Win2000 SP4后&#xff0c;则要在命令行执行"regsvr32 i asp…

Go学习笔记—Go并发基础

Go并发基础 并行&#xff1a;程序在任意时刻内都是同时运行的 并发&#xff1a;程序在单位时间内都是同时运行的 ​扇入&#xff1a;多条通道聚合到一条通道中&#xff08;select聚合&#xff0c;加密解密服务&#xff09; ​扇出&#xff1a;一条通道发散到多条通道中&#x…

史蒂夫乔布斯6月斯坦佛大学演讲: 必须找到你所钟爱的东西

博客搬家咯&#xff5e; http://joeleee.github.io/ 博客搬家咯&#xff5e; http://joeleee.github.io/ 博客搬家咯&#xff5e; http://joeleee.github.io/ 关于如何将生命中的点点滴滴串联起来&#xff0c;关于爱和损失&#xff0c;关于死亡&#xff0c;乔布斯如是说. h1 ! …

博客园贵团队可以给个解释么?

发表了一片文章&#xff0c;被博客园团队移除出首页&#xff0c;自认为没有违反规定&#xff0c;于是回复该消息&#xff0c;想询问原因&#xff0c;但是一直没得到回复&#xff0c;请问这是为什么呢&#xff0c; 为什么那么久了还是未读状态&#xff0c;为什么从来不给回复&am…

unity, 颜色随高度渐变shader

一&#xff0c;颜色随世界空间高度渐变。 Shader "Custom/heightGradual_worldSpace" { Properties { _Color ("Color", Color) (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) "white" {} _Glossiness ("S…

WinForm给ComboBox增加Value(转)

做一个图书管理系统,用到了combobox, 天呀,竟然不能像DropDownList那样直接使用键值对的方式 百度了半天,终于找到方法,发出来大家共享 用DataTable可以&#xff01;但是总不能象男&#xff0c;女这样两项也用一个DataTable吧&#xff0c; 这也太麻烦了啊&#xff01; 用Hashta…

Go学习笔记—Channel通道

Go并发通信——Channel ​ Go语言的并发模型是CSP&#xff08;Communicating Sequential Processes&#xff09;&#xff0c;提倡通过通信共享内存而不是通过共享内存而实现通信。&#xff08;DO NOT COMMUNICATE BY SHARING MEMORY; INSTEAD, SHARE MEMORY BY COMMUNICATING.…

【转载】程序员技术练级攻略

月光博客6月12日发表了《写给新手程序员的一封信》&#xff0c;翻译自《An open letter to those who want to start programming》&#xff0c;我的朋友&#xff08;他在本站的id是Mailper&#xff09;告诉我&#xff0c;他希望在酷壳上看到一篇更具操作性的文章。因为他也是喜…

FileSystemObject (FSO)对象方法总结及应用

FileSystemObject (FSO)组件可以用来处理系统驱动器&#xff0c;文件夹&#xff0c;和文件。因为它是一个ActiveX控件&#xff0c;所以它能被js&#xff0c;vbs等文件使用&#xff0c;以实现对机器文件系统的操作。 下面将总结一下FSO中的对象和方法&#xff0c;其实FSO中大多数…

IBM如何拥抱Spark

Spark是目前相当火热的开源计算框架&#xff0c;相对于Hadoop&#xff0c;Spark优势是高性能和易用性。Spark的高性能源于其采用内存储存数据&#xff0c;应用可以以内存的速度进行运算&#xff1b;Spark的易用性在于通用的API&#xff0c;用户可以编写复杂的并行计算程序&…

SQL语句导入导出大全

SQL语句导入导出大全/******* 导出到excelEXEC master..xp_cmdshell ’bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""’ /*********** 导入ExcelSELECT * FROM OpenDataSource( ’Microsoft.Jet.OLEDB…

arcgis js 4.x 地图中加入图片

arcgis js 4.x版本&#xff0c;如何加入图片问题&#xff1a;如何将自定义图片放入到arcgis的图层当中&#xff1f;本人在网上查找的方法中&#xff0c;发现大部分方法只适用于3.x版本&#xff0c;只有一种引入自定义BaseDynamicLayer的方法可用&#xff0c;然而按照这种方式&a…

对你的的应用程序进行Debug

对你的的应用程序进行Debug 介绍如何使用Microsoft Visual Studio Code Name "Orcas" Beta 1对基于Silverlight的应用程序进行debugging .在Silverlight中debugging所使用的工具和技巧和其它的 Visual Studio projects是类似的. 想查看更多的关于debugging信息的, 查…

如果reporting server出现“无法安装打印控件”的处理方法。

1.打开"控制面板",选择"添加或删除程序"2.将显示更新更新打勾.3.查找文件"KB956391安装更新"4.卸载此文件即可打印了 转载于:https://www.cnblogs.com/miaomiaoga/archive/2008/12/02/1346319.html

在.Net如何制作自定义的快捷方式(转)

我们用.Net安装程序生成的快捷方式是这样的&#xff0c;如下图&#xff1a;该图中目标所对应的文本框是灰色的&#xff0c;并且下方的查找目标和更改图标两个按钮也是不可用。这样我们根本就没有办法更改这个快捷方式。假如这时有个客户需要在程序启动的时候传入一些参数&#…