类扩展@interface Class () 功能更强大,可以将变量注入类中.类别@interface Class (Category)不能.
还有什么其他差异,何时应该在类扩展中使用类别?
我想在我的项目中为所有UIImageViews添加一些圆角.我已经有了代码工作,但我必须将它应用于每个图像; 我应该继承UIImageView来添加它吗?如果是这样,有人可以给我一些指示如何做到这一点?
这是代码
- (void)viewDidLoad {
[super viewDidLoad];
NSString *mainpath = [[NSBundle mainBundle] bundlePath];
welcomeImageView.image = [UIImage imageWithContentsOfFile:[mainpath stringByAppendingString:@"/test.png"]];
welcomeImageView.layer.cornerRadius = 9.0;
welcomeImageView.layer.masksToBounds = YES;
welcomeImageView.layer.borderColor = [UIColor blackColor].CGColor;
welcomeImageView.layer.borderWidth = 3.0;
CGRect frame = welcomeImageView.frame;
frame.size.width = 100;
frame.size.height = 100;
welcomeImageView.frame = frame;
}
Run Code Online (Sandbox Code Playgroud) 任何人都可以解释Objective-C中协议和类别之间的差异吗?你什么时候用另一个?
我试图在Xcode中自动创建NSManagedObject子类(2个相关实体).它们是这样生成的:

但是,在我做任何进一步操作之前,当我尝试构建并运行它时,会发生链接错误,如下所示:
duplicate symbol _OBJC_CLASS_$_Photo in:
/Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photo+CoreDataClass.o
duplicate symbol _OBJC_METACLASS_$_Photo in:
/Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photo+CoreDataClass.o
duplicate symbol _OBJC_CLASS_$_Photography in:
/Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photography+CoreDataClass.o
duplicate symbol _OBJC_METACLASS_$_Photography in:
/Users/Kefeng/Library/Developer/Xcode/DerivedData/Photomania-aellrakjngugnzcgrleiytvrfvyt/Build/Intermediates/Photomania.build/Debug-iphonesimulator/Photomania.build/Objects-normal/x86_64/Photography+CoreDataClass.o
ld: 4 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我曾多次尝试创建新项目并做同样的事情.我的初衷是将一些自定义方法添加到子类中.但是当我添加任何东西时,例如Photo+CoreData.h/m,出现与上面相同的错误.
我找到了一些关于"双重包含"或"将文件保存到错误的目录"的答案,但我没有这样做.有人对此有任何想法吗?
谁能告诉我何时使用类别以及何时在Objective-C中使用子类?还请告诉我它们的优点和缺点.
如何在Xcode 7.2中为objective-c创建现有Cocoa Touch类的类别?我一直在寻找一个小时,但找不到任何有用的东西.
我有一个Objective-C类别,我想在不重复类别中包含的代码的情况下添加到多个类中.我只想将相同的方法添加到多个类中.
我对现有类NSManagedObject的子类(Book,Chapter,Page),我想在所有这些子类的清洁和维护的方式添加常用功能.
一种方法是给类添加到他们的共同的超(NSManagedObject),但有增加类别的方法,所有的结果NSManagedObject子的时候我想的方法添加三个NSManagedObject子类(Book,Chapter,Page).
另一种解决办法是子类NSManagedObject,然后有Book,Chapter和Page来自继承NSManagedObject的子类.这是最干净,最直接的方法.这种方法的一大缺点是当数据模型发生变化并且Xcode重新生成子类时,它会将它们重置为继承NSManagedObject而不是继承SubclassedManagedObject.如果可能的话,我想避免使用像mogenerator/Xmo这样的东西.
是否可以在多个类上添加单个类别而无需重复代码?
谢谢.
考虑以下情况:
Object > MyClass > MyClassA, MyClassB
Run Code Online (Sandbox Code Playgroud)
例如,如果我想要对象级别的东西,我添加了printDetail(); 我怎样才能在Java实现中做到这一点?此外,我可以覆盖所有Object的方法.例如,我需要一个全新的.toString(),我可以覆盖它吗?谢谢.
我正在尝试使用关联对象API向类别添加"属性".
objc_setAssociatedObject(self, &kIsAnimatingAssocObjKey, animating,
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
Run Code Online (Sandbox Code Playgroud)
Xcode抱怨:
函数'objc_setAssociatedObject'的隐式声明在C99中无效
和
使用未声明的标识符'OBJC_ASSOCIATION_RETAIN_NONATOMIC'
Xcode 4.5.2,带有部署目标的iOS SDK 6.它不起作用.
关于obj_assoc 的文章都没有提到我必须导入任何特殊内容.
我知道我们可以使用关联引用来调用类别中的类似于ivar的行为.但是,无法在类别中声明新的ivars背后的具体原因是什么?
是因为我们会入侵班级的私人空间吗?或者还有其他原因吗?如果是的话,我会很感激一个例子,它显示了在类别中声明ivars的能力,可以打破它所破坏的任何东西.
objective-c ×7
ios ×4
xcode ×3
cocoa-touch ×2
subclass ×2
cocoa ×1
code-reuse ×1
inheritance ×1
ivar ×1
java ×1